它涉及TCL 8.6,并且来自我在问题上得到的答案 吹毛求疵:Tcl 是否存储在变量中,为了速度,在程序中 因此,请考虑以下代码:
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. 如何禁用?
因此,expr 和/或三元正在通过处理"返回"来"在引擎盖下"做一些事情。问题是:
- 它有什么作用?
- 如何禁用它?
这不是三元,而是expr
的一般语义。该命令被记录并定义为尽可能返回规范化数值,规范化会执行诸如将数值转换为十进制之类的操作。例如,它会将023
(看起来像一个八进制值(转换为19
(= 2×81+3×80(。
你不能改变这个领域的expr
;它是语义的一个定义部分(可能会在未来的版本中删除,但谁愿意等待呢?(。如果这是一个问题,您需要使用您已有的if
命令版本,因为它没有转换为数字(如果可能(的语义。