Вы хотите расширить подстановки внутри строки {
, заключенной в скобки }
(логически) после того, как она написана в сценарии. Обычно это не рекомендуется (не тогда, когда вы можете правильно построить аргументы с list
), но вы можете сделать это.
method title {t} {
set title_text [lmap value $t {
uplevel 1 [list subst $value]
}]
set result [format "%-6s %-6s" {*}$title_text]
}
Мы выполняем преобразование для каждого слова в аргумент (lmap
) и преобразование должно применить subst
к нему, что должно быть сделано в контексте вызывающего (uplevel 1
). Использование list
позволяет гарантировать создание сценария без подстановки во внешнем контексте, очень настоятельно рекомендуемая практика .
Особенностью TclOO является то, что вам не нужно принимать специальные меры предосторожности, чтобы использовать uplevel
(или upvar
) при его использовании, в отличие от некоторых других более старых объектных систем для Tcl. Это делает такие вещи в методе не более сложным, чем в обычной процедуре. Это верно даже при наличии наследства.