Как использовать троичный оператор для добавления необязательной части к анонимной строке в tcl? - PullRequest
1 голос
/ 20 сентября 2019

Я новичок в tcl (извините, если ответ очевиден, но чтение учебников и документации не помогло).У меня есть заявление в tcl, которое говорит:

startupitem.start "foo
\tbar"

Что я хотел бы сделать, это сделать часть "foo" стать необязательной, в зависимости от результата [variant_isset "alice"] с использованием троичного оператора и без использования переменных.

Я пробовал несколько вещей по линии

startupitem.start "[variant_isset """alice"""?"""foo\n\t""":""""""] bar"

(конечно, со всеми видами экранирования и комбо или использованием двойных кавычек внутри двойных кавычек), но у меня нетне удалось.

Результат, если выражение variant_isset вернет true, состоит в том, что оно эквивалентно

startupitem.start "bar" 

Ответы [ 2 ]

1 голос
/ 21 сентября 2019

Вы могли бы предпочесть использовать команду if (которая очень похожа на версию команды троичного оператора), чей результат является результатом сценария тела, который он оценивает.Если предложение else отсутствует, результатом будет пустая строка, если ничего не выбрано:

startupitem.start "[if {[variant_isset alice]} {string cat "foo\n\t"}] bar"

Или вы можете создать список, а затем join it:

set items {}
if {[variant_isset alice]} {
    lappend items "foo"
}
lappend items bar
startupitem.start [join $items "\n\t"]

Этот второй подход особенно хорошо работает, когда все усложняется.

1 голос
/ 20 сентября 2019

Вы хотите проверить команду Tcl expr, которая вводит язык выражения Tcl вкл.то, что вы называете «троичным» оператором ?:

startupitem.start "[expr {[variant_isset "alice"]?"foo\n\t":""}]bar"

Если вам доведется использовать Tcl достаточно недавно, вы можете предпочесть сборку строк outplace, используя string cat, а не на месте:

string cat [expr {[variant_isset "alice"]?"foo\n\t":""}] "bar"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...