Если у вас есть Tcl 8.5 или более поздней версии, вы определенно следует использовать расширяющийся замену:
set optionalParam [list]
if { somecondition } {
lappend optionalParam someValue
}
spawn foo.sh paramA paramB "param C" {*}$optionalParam
В 8.4 и выше, вы вместо того, вынуждены использовать что-то вроде этого:
set optionalParam [list]
if { somecondition } {
lappend optionalParam someValue
}
eval [list spawn foo.sh paramA paramB "param C"] $optionalParam
Это был явно подвержен ошибкам и многословно и многие Tclers склонны использовать ярлыки, как
set optionalParam ""
if { somecondition } {
set optionalParam someValue
}
eval spawn foo.sh paramA paramB paramC $optionalParam
Это не получилось бы «интересно» с "param C"
. Или, если у реального someValue
есть пробел. (Попробуйте выяснить, почему для себя! Подумайте, что у вас есть бонусная точка, если вы можете сделать это, не используя интерпретатор Tcl, чтобы сделать это для вас.) Из-за этих проблем мы добавили синтаксис расширения в Tcl 8.5, который hugely легче получить право.
Я помню бои за точный синтаксис; было хорошо, что мы делали это по электронной почте в то время (около 10 лет назад), или мы, возможно, пришли к насилию друг с другом. Это было намного хуже, чем бои над добавлением поддержки OO в 8.6 ... –
Если бы моя проблема была немного сложнее, я бы придерживался ваших предложений, но, поскольку это довольно простой вариант использования, простое расширение списка работало хорошо (с использованием экранированного цитаты для внутренних разнесенных строк, конечно). Во всяком случае, спасибо за ответ и смешной комментарий :) ps: любой недостаток на подходе «простого расширения»? – tavlima