2015-12-18 3 views
2

Я программирую в tcl \ tk. код показывает следующее сообщение об ошибке:арифметические команды в tcl/tk программировании

 
"missing operand at [email protected]_ 
in expression "[email protected]_"" 
entry .e1 -textvar a 
entry .e2 -textvar b 
message .m -textvar c 
button .b -text "press here" -command "set c [expr $a+$b]" 

ошибка показывает в последней строке. Я запускаю его в tclsh и показываю ту же ошибку. Я также попытался использовать его в функции proc, но та же ошибка появляется. Я пытаюсь выполнить арифметические операции с помощью tk.

ответ

2

Когда 4-я строка оценивается интерпретатором, она расширяет содержимое указанной части и выполняет команду expr с содержимым a и b. Однако эти переменные не имеют значения в этот момент времени. Вы хотели оценить эту команду, когда пользователь нажимает кнопку, но ее оценивают при создании кнопки.

Быстрое исправление вам нужно:

button .b -text "press here" -command {set c [expr {$a + $b}]} 

при условии a и b глобальны, как команда будет оцениваться в глобальном пространстве имен, когда кнопка нажата.

Более длинное исправление заключается в том, что вы должны внимательно прочитать Tcl man page с вниманием к описанию различий между приведенными "" и сгруппированными {} выражениями в Tcl.

+0

Дополнительным дополнением к этому является _allways_ привязать ваши выражения и всегда создавать свои обратные вызовы в качестве вызовов процедур. Вернее, случаи, когда вы не так редки, и поэтому эксперты - только то, что это может быть всегда; а также использование вспомогательных процедур очень хорошо. –

+0

И если это предназначено для ввода данных от пользователей, может быть хорошей идеей убедиться, что переменные a и b являются числами перед выполнением вычислений. – Jerry

Смежные вопросы