TCL ternary expr 做输出的处理
TCL ternary expr does processing of output
涉及TCL 8.6,来源于我在issue上得到的答案
因此,请考虑以下代码:
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 应该 return 相同的值(如果类似的代码是用 Ruby 或 PERL 编写的,他们实际上是这样做的)。 TCL 显然不是这样。现在考虑 me 和 m1 的输出(记住,如果调用 k,则打印出 "expected return"):
puts [ me 23 0 ]
>returnal should be "023"
>19
puts [ me1 23 0 ]
>returnal should be "023"
>023
所以,expr and/or 三进制正在做一些事情 "under the hood",通过处理 "returnal"。问题是:
1。它有什么作用?
2.如何禁用它?
So, expr and/or the ternary are doing something "under the hood", by processing the "returnal". The question are:
- What does it do?
- How can it be disabled?
这不是三元组,而是 expr
的一般语义。如果可能的话,该命令被记录并定义为 return 一个 标准化 数值,并且标准化会执行诸如将数值转换为十进制之类的操作。例如,它将 023
(看起来像八进制值)转换为 19
(= 2×81+3×8 0).
您无法在此区域更改expr
;它是语义的定义部分(可能会在未来的版本中删除,但谁愿意等待呢?)。如果这是一个问题,您需要使用您已有的 if
命令版本,因为它没有转换为数字的语义。
涉及TCL 8.6,来源于我在issue上得到的答案
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 应该 return 相同的值(如果类似的代码是用 Ruby 或 PERL 编写的,他们实际上是这样做的)。 TCL 显然不是这样。现在考虑 me 和 m1 的输出(记住,如果调用 k,则打印出 "expected return"):
puts [ me 23 0 ]
>returnal should be "023"
>19
puts [ me1 23 0 ]
>returnal should be "023"
>023
所以,expr and/or 三进制正在做一些事情 "under the hood",通过处理 "returnal"。问题是:
1。它有什么作用?
2.如何禁用它?
So, expr and/or the ternary are doing something "under the hood", by processing the "returnal". The question are:
- What does it do?
- How can it be disabled?
这不是三元组,而是 expr
的一般语义。如果可能的话,该命令被记录并定义为 return 一个 标准化 数值,并且标准化会执行诸如将数值转换为十进制之类的操作。例如,它将 023
(看起来像八进制值)转换为 19
(= 2×81+3×8 0).
您无法在此区域更改expr
;它是语义的定义部分(可能会在未来的版本中删除,但谁愿意等待呢?)。如果这是一个问题,您需要使用您已有的 if
命令版本,因为它没有转换为数字的语义。