Я использую {*}
в tcl для расширения аргументов и сталкиваюсь с этой проблемой.Использование расширения аргумента {*} с более чем одним оператором
#!/usr/bin/tclsh
set reset {
set count 0;
set age 24;
}
puts $reset
eval $reset; # This is working fine. Commented out the below line and tried
{*}$reset; # This is throwing error. Commented out the above line and tried.
if { [ info exists count ] && [ info exists age ] } {
puts "count & age initialzed to $count and $age"
} else {
puts "count & age not initialzed :("
}
Как вы видите, у меня есть переменная сброса определяется и я оценка с eval
, а также с {*}
.
Хотя eval
работает отлично, {*}
бросает ошибку как
wrong # args: should be "set varName ?newValue?"
while executing
"{*}$reset"
Тогда я изменил переменную reset
следующим образом,
set reset {
set count 0;
}
т.е. я удалил 2-ое set
заявление и код работает отлично.
Почему {*}
работает нормально с одним утверждением и не более чем с этим? Или что мне здесь не хватает?
Эмм, даже с одной командой, это не 'работа' как таковой, потому что '$ count' будет иметь значение' 0; 'вместо' 0', что фактически объясняет проблему: ';' интерпретируется как строка, а не как метасимвол для кода. – Jerry
Да. Джерри. Ты прав. Теперь только я это наблюдаю. Тогда в одном случае можно использовать только одну команду? – Dinesh
Я бы не советовал использовать расширение аргумента как это, потому что я не думаю, что это причина, по которой '{*}' был реализован. Чтобы оценить код, используйте 'eval' и для расширения списка используйте' {*} '. – Jerry