Как использовать переменную в качестве значения по умолчанию для аргумента процедуры TCL - PullRequest
9 голосов
/ 23 июня 2011

У меня есть переменная, которую я хотел бы использовать в качестве значения по умолчанию для аргумента:

proc log {message {output $::output}} {
   ....
}

Есть ли способ сделать это или мне нужно оценить переменную внутри моего процесса?

Ответы [ 3 ]

11 голосов
/ 23 июня 2011

Да, но вы не можете использовать фигурные скобки ({}) для списка аргументов. Вы объявляете процедуру, например, таким образом:

proc log [list message [list output $::output]] {
   ....
}

Но учтите:
Переменная оценивается во время объявления процедуры, а не при ее выполнении!

7 голосов
/ 23 июня 2011

Если вам нужен аргумент по умолчанию, который определяется только в значении во время вызова, вам нужно быть более хитрым.Ключ в том, что вы можете использовать info level 0, чтобы получить список аргументов для текущего вызова процедуры, а затем просто проверить длину этого списка:

proc log {message {output ""}} {
    if {[llength [info level 0]] < 3} {
        set output $::output
    }
    ...
}

Помните, что при проверке списка аргументовпервое - это имя самой команды.

1 голос
/ 13 февраля 2014

Еще один способ сделать это:

proc log {message {output ""}} {
    if {$output eq ""} {
        set output $::output
    }
}
...