Как использовать переменную в качестве значения по умолчанию для аргумента процедуры TCL
У меня есть переменная, которую я хотел бы использовать в качестве значения по умолчанию для аргумента:
proc log {message {output $::output}} {
....
}
Есть ли способ сделать это или мне нужно оценить переменную внутри моего процесса?
3 ответа
Да, но вы не можете использовать фигурные скобки ({}
) для вашего списка аргументов. Вы объявляете процедуру, например, так:
proc log [list message [list output $::output]] {
....
}
Но учтите:
Переменная оценивается во время, когда процедура объявлена, а не когда она выполняется!
Если вам нужен аргумент по умолчанию, который определяется только в значении во время вызова, вам нужно быть более хитрым. Ключ в том, что вы можете использовать info level 0
чтобы получить список аргументов для текущего вызова процедуры, а затем просто проверить длину этого списка:
proc log {message {output ""}} {
if {[llength [info level 0]] < 3} {
set output $::output
}
...
}
Помните, что при проверке списка аргументов первым является имя самой команды.
Еще один способ сделать это:
proc log {message {output ""}} {
if {$output eq ""} {
set output $::output
}
}