它涉及 TCL 8.6,并且源自我在问题Nitpicking: Tcl storage in a variable or not, for speed, in procedure中得到的答案 所以,请考虑以下代码:
proc me1 { in1 in2 } {
if { $in1 > $in2 } {
return [ k $in1 ]
} else {
return [ k2 $in2 $in1 ]
}
}
proc me { in1 in2 } {
expr { $in1 > $in2 ? [ k $in1 ] : [ k2 $in2 $in1 ] }
}
proc k {in1 } {
puts "returnal should be \"0${in1}\""
return "0${in1}"
}
proc k2 { in1 in2 } {
return "01${in1}00 ${in2}"
}
procs me 和 me1 似乎应该返回相同的值(如果类似的代码是用 Ruby 或 PERL 编写的,它们实际上会返回相同的值)。TCL 显然不是这种情况。现在考虑 me 和 m1 的输出(请记住,如果调用 k,则打印出“预期返回”):
puts [ me 23 0 ]
>returnal should be "023"
>19
puts [ me1 23 0 ]
>returnal should be "023"
>023
因此, expr 和/或三元通过处理“返回”正在“幕后”做一些事情。问题是:
1. 它有什么作用?
2. 怎么禁用?