Вот код, я тестирование:С помощью команды TCL Eval с «установить»
proc check_eval {} {
set cmd {set return_val {}; set return_val}
puts "Command to evaluate : $cmd"
uplevel eval $cmd
}
я столкнулся со следующей проблемой: когда я называю «check_eval», это выглядит как заявление «набор Return_Val {} msgstr "игнорируется. I.e., интерпретатор ищет существующую переменную return_val в области вызова. Пример:
tcl>unset return_val
tcl>check_eval
Command to evaluate : set return_val {}; set return_val
can't read "return_val": no such variable
while evaluating check_eval
tcl>set return_val 556
556
tcl>check_eval
Command to evaluate : set return_val {}; set return_val
556
tcl>
С другой стороны, если заменить "установить Return_Val {}" в процедуре, например, "установить Return_Val 10000", он будет показывать 10000 при работе:
tcl>set return_val 556
556
tcl>check_eval
Command to evaluate : set return_val 10000; set return_val
10000
tcl>set return_val
10000
Кто-нибудь может объяснить мне, пожалуйста, что здесь происходит?
Спасибо.
@mkostya, читать [ "Eval и Цитируя"] (HTTP: // beedub .com/book/3rd/Eval.pdf) из книги, чтобы лучше понять e цитирование вопросов. – kostix
Альтернативно, 'uplevel [list eval $ cmd]'. Это абсолютно то же самое, что и 'uplevel $ cmd', поэтому угадайте, что лучше ... –
Спасибо всем (особенно potrzebie) за ответы! – mkostya