我们说我有这个:
set arg {{e1 e2}}
eval puts $arg
因为eval命令首先连接其参数,所以$ arg变为{e1 e2}。
如何在调用eval时保持参数不变?在上面的例子中,我想$ arg仍然是{{e1 e2}}。
具体来说,我的情况是这样的:
proc p1 {cmd arg} {
eval $cmd $arg
}
因此命令名及其参数都传递给此proc。命令名称始终是文字值,因此不是问题。关键是我希望在调用eval时参数' e数据完整性不变。
答案 0 :(得分:1)
% set arg {{e1 e2}}
{e1 e2}
% eval { puts $arg }
{e1 e2}
% # Or use 'list' command to make them not to be get expanded.
% eval [ list puts $arg ]
{e1 e2}
%
根据你的proc应用这个逻辑,它可以是以下任何内容
% proc p1 { cmd arg } {
eval { $cmd $arg }
}
% p1 puts {{e1 e2}}
{e1 e2}
%
% proc p2 { cmd arg } {
eval [ list $cmd $arg ]
}
% p2 puts {{e1 e2}}
{e1 e2}
% proc p3 { cmd arg } {
eval $cmd [ list $arg ]
}
% p3 puts {{e1 e2}}
{e1 e2}
%
答案 1 :(得分:0)
尝试分别用双引号指定命令名及其参数。
Tcl会将它们视为两个独立的字符串。