在其他动态类型,交错语言(Ruby,PERL ...)中,可以将哈希中的键定义为函数调用的内联.例如(在Ruby中:
a[ foo(1) ] = bar
Run Code Online (Sandbox Code Playgroud)
我试图在Tcl 8.4中做同样的事情,但失败了,请参阅下面的tclsh日志:
% proc add1 { x } { expr {$x + 1 } }
% array set p {}
% set p( [add1 1]) 0
wrong # args: should be "set varName ?newValue?"
Run Code Online (Sandbox Code Playgroud)
不用说,我将一个变量分配给add1 1的输出,并使用变量值,它确实有效:
% set a [add1 1]
2
% set p($a) 0
0
Run Code Online (Sandbox Code Playgroud)
毫无疑问,这是一个风格问题,但我喜欢内联函数,而不是使用中间变量.有什么建议?
这不是真的'漂亮',但你可以eval用来做这样的事情:
eval "set p([add1 1]) 0"
Run Code Online (Sandbox Code Playgroud)
首先,你给的字符串"set p([add1 1]) 0"来eval和,因为它是行情之间,你得到替代的第一级:[add1 1]被传递,这意味着传递给最后一个字符串之前评估eval的set p(2) 0.eval然后评估这个.
编辑:
实际上,它也没有eval工作,你的错误让我觉得奇怪,但没有太注意细节.您需要在第一个paren之后删除空格:
set p([add1 1]) 0
Run Code Online (Sandbox Code Playgroud)
否则,set解释您提供两个参数[add1 1])和0变量名称p(.
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |