В сценарии Tcl я хочу уловить возврат процесса Tcl для выполнения некоторых действий по завершению. Например мой код может выглядеть следующим образом:Tcl Script: Неверное имя команды возвращает при выполнении тела proc
proc X10 { a } { return [expr $a * 10] }
proc procF {} {
set a 13
catch {[info body X10]} __result
return $__result
}
procF
предыдущий код дает мне ошибку: invalid command name " return [expr $a * 10] "
Хотя что замена info body X10
с return [expr $a * 10]
работ, как ожидалось. Первоначально я думал, что они оба взаимозаменяемы и должны давать одинаковый результат. Итак, почему первый дает ошибку и в чем разница между ними?
Если вы хотите, чтобы ваш код работал быстрее и у него было меньше возможных ошибок, определите 'X10' с фигурными скобками вокруг выражения:' proc X1 {a} {return [expr {$ a * 10}]} 'Он позволяет Tcl для байт-кода-скомпилировать его и не будет взорваться на 'X1 {[puts haha; exit]}' ... –
Это хороший момент, я всегда спрашивал себя, почему гиды и ссылки говорят, что лучше заключить выражение с фигурными скобками и я подумал, что это просто какая-то читаемость. Но я не получил эту часть «bytecode-compile», я был бы признателен, если бы вы могли подробнее рассказать об этом или сослаться на меня как на ссылку или ссылку на нее. – Devos
Обратите внимание, что что бы вы ни делали, 'procF' вернет строку« __result ». Вероятно, вы хотите, чтобы вызов был 'return $ __ result' или, что то же самое,' set __result'. –