TCL 三元 expr 对输出进行处理



它涉及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 和/或三元正在通过处理"返回"来"在引擎盖下"做一些事情。问题是:

  1. 它有什么作用?
  2. 如何禁用它?

这不是三元,而是expr的一般语义。该命令被记录并定义为尽可能返回规范化数值,规范化会执行诸如将数值转换为十进制之类的操作。例如,它会将023(看起来像一个八进制值(转换为19(= 2×81+3×80(。

你不能改变这个领域的expr;它是语义的一个定义部分(可能会在未来的版本中删除,但谁愿意等待呢?(。如果这是一个问题,您需要使用您已有的if命令版本,因为它没有转换为数字(如果可能(的语义。

相关内容

  • 没有找到相关文章

最新更新