我遇到了eval
我无法理解的命令的奇怪行为。当我尝试使用 eval 运行名称存储在变量中的命令时,我得到了奇怪的结果。
数组mCallBackCont
的值::postLayRep1||mainTableView sendToLoads
低于insert
,因此*:
>>set mCallBackCont(insert)
::postLayRep1||mainTableView sendToLoads
::postLayRep1||mainTableView
具有sendToLoads
公共方法的类的对象在哪里
当我尝试执行以下操作之一时:
eval {::postLayRep1||mainTableView sendToLoads}
eval ::postLayRep1||mainTableView sendToLoads
eval "::postLayRep1||mainTableView sendToLoads"
eval $mCallBackCont(insert)
eval "mCallBackCont(insert)"
我得到了正确的行为,但是当我使用
eval {$mCallBackCont(insert)}
我得到错误:
invalid command name "::postLayRep1||mainTableView sendToLoads"
当我尝试使用没有参数的常规 proc 时:
>>proc test_proc {} {return}
>>set a test_proc
>>eval {$a}
一切正常,但是当我添加参数时,也会发生同样的情况:
>>proc test_proc {val} {puts $val}
>>set a [list test_proc 1]
test_proc 1
>>eval {$a}
invalid command name "test_proc 1"
由于 eval 命令是我正在使用的库中代码的一部分,我无法更改它,我唯一能确定的是mCallBackCont(insert)
. 库中的代码是:
if { [catch {eval {$mCallBackCont(insert) [namespace tail $this] $type $name $n $redraw}} e] } {
error "Wrong number of arguments for the procedure \"$mCallBackCont(insert)\". Should be \"table type name num redraw\"."
}
为什么
eval {$var}
适用于 procs 但不适用于类的方法(我想这与 proc 是一个单字命令的事实有关,而方法更复杂)?我可以通过什么方式设置 的值
mCallBackCont(insert)
以使其正常工作?
* - 我试图将值放在mCallBackCont(insert)
一个列表和一个字符串中""