引数のデフォルト値として使用したい変数があります。
proc log {message {output $::output}} {
....
}
これを行う方法はありますか、またはプロシージャ内の変数を評価する必要がありますか?
引数のデフォルト値として使用したい変数があります。
proc log {message {output $::output}} {
....
}
これを行う方法はありますか、またはプロシージャ内の変数を評価する必要がありますか?
{}
はい。ただし、引数リストに中括弧 ( ) を使用することはできません。たとえば、次のようにプロシージャを宣言します。
proc log [list message [list output $::output]] {
....
}
ただし、注意してください:
変数は、実行時ではなく、プロシージャーの宣言時に評価されます!
呼び出し時に値でのみ定義されるデフォルトの引数が必要な場合は、さらに注意が必要です。重要なのはinfo level 0
、現在のプロシージャ呼び出しの引数のリストを取得するために使用できることです。その後、そのリストの長さを確認するだけです。
proc log {message {output ""}} {
if {[llength [info level 0]] < 3} {
set output $::output
}
...
}
引数のリストを確認するとき、最初の引数はコマンド自体の名前であることを忘れないでください。