Lio*_*bro 4 tcl ternary-operator
为什么这不像我想的那样工作?
set x [if {1} {return 2} {return 3}]
Run Code Online (Sandbox Code Playgroud)
命令输出显示2,但是当你检查它的值时x,发现它是未定义的..!
我看过一个解决方法,......
proc give {x} {return $x}
set x [if {1} {give 2} {give 3}]
Run Code Online (Sandbox Code Playgroud)
......但我不明白为什么第一个不起作用.
"命令的返回值是执行的正文脚本的结果,如果没有任何表达式非零并且没有bodyN,则为空字符串."
问题:
set x [if {1} {return 2} {return 3}]设置值x?set x [if {1} {return 2} {return 3}]不起作用,如何在交互式shell上tclsh显示" 2"?tclsh显示" 2",它是如何set x保持未定义的?见http://www.tcl.tk/man/tcl8.6/TclCmd/return.htm
返回码在Tcl中用于控制程序流程.Tcl脚本是一系列Tcl命令.只要每个命令评估返回TCL_OK的返回代码,评估将继续执行脚本中的下一个命令.命令评估返回的任何异常返回代码(非TCL_OK)都会导致中断下一个命令的流程.脚本评估停止,命令的异常返回代码成为完整脚本评估的返回代码.这是脚本评估期间错误导致调用堆栈中断和展开的机制.它也是断开,继续和返回等命令导致脚本评估终止而不按顺序评估所有命令的机制.
因此,脚本的评估将中止,x不会设置,并2作为结果返回并打印.
该expr命令返回一个值,所以
set x [if 1 {expr 2} {expr 3}]
Run Code Online (Sandbox Code Playgroud)
但如果你这样做,你也可以使用三元运算符
set x [expr {1 ? 2 : 3}]
Run Code Online (Sandbox Code Playgroud)