【发布时间】:2017-07-03 08:51:40
【问题描述】:
它涉及 TCL 8.6,并且源自我在问题Nitpicking: Tcl storing in a variable or not, for speed, in procedures 上得到的答案 所以,考虑一下这段代码:
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。怎么禁用?
【问题讨论】:
标签: tcl ternary-operator expr