aeo*_*lus 2 syntax tk-toolkit tcl
我试图获取列表的最大值,该列表可能包含零,0。在 Tcl 8.5 中,当我运行时:
set x {-5 -4 -3 -2 -1 0 1 2 3 4 5}
set maxx [expr max($x)]
set minx [expr min($x)]
puts "$minx $maxx"
Run Code Online (Sandbox Code Playgroud)
我收到错误:
missing operator at _@_
in expression "max(-5 -4 -3 -2 -1 _@_0 1 2 3 4 5)"
(parsing expression "max(-5 -4 -3 -2 -1 0 1...")
invoked from within
"expr "max($x)""
invoked from within
"set maxx [expr "max($x"]"
Run Code Online (Sandbox Code Playgroud)
我尝试过我能找到的语法变化和资源。
作为解决方法,我将只使用 lsort 并获取该列表的第一个/最后一个元素,但我真的想知道我在这里做错了什么:/谢谢。
Tcl 表达式的工作方式有点不同,您不能直接将列表填充到其中并期望它起作用。
我建议你::tcl::mathfunc::max
直接使用,带参数扩展({*}
):
set maxx [::tcl::mathfunc::max {*}$x]
set minx [::tcl::mathfunc::min {*}$x]
Run Code Online (Sandbox Code Playgroud)
但如果您仍然想使用expr
,您可以尝试使用 join 创建一个有效的表达式:
set maxx [expr "max([join $x ,])"]
set minx [expr "min([join $x ,])"]
Run Code Online (Sandbox Code Playgroud)
但这的性能很差并且可以被利用(代码注入),请考虑以下输入x
:{-1 {[puts "Not good"; exit]} 2}