tcl 中的过程:没有 return 语句,仍然得到 return 值?

Procedure in tcl: no return statement, still getting a return value?

我是 tcl 的新手,想对 return 语句在该语言中的工作方式有一些了解。以下面的代码为例:

proc add name {
  set name [expr $name+2]
}

set y 5
puts [add $y]

我惊讶地发现这实际上将值 7 打印到我的终端。由于我的程序中没有包含 return 语句,所以我没有期望打印出任何内容。

当我包含 return 语句时,它似乎覆盖了这个奇怪的默认行为:


proc add name {
  set name [expr $name+2]
  return hello
}

set y 5
puts [add $y]

以上确实return你好。但它与 7 有什么关系?

为什么即使我没有 return 语句,程序仍然 return 一个 7?为什么当我提供 return 语句时它会覆盖此行为?

如果您没有显式return一个值,将返回在 proc 中执行的最后一条语句的值。这在描述部分末尾的 https://www.tcl-lang.org/man/tcl8.6/TclCmd/proc.html 中有记录。