言語の一部ではありませんが、この機能を既存の機能に追加するものを実装するのはかなり簡単です。唯一注意しなければならないことは、関数が有効な引数として文字列--help
を受け取ることができないことです。その引数はその機能をトリガーします。これはありませんが(名前を変更し、同じ名前の別の関数を宣言することによって)関数をオーバーライドし、関数は、引数--help
で呼び出されたかどうかを確認することです
# Lets call the feature "document". As in, add documentation:
proc document {procname text} {
rename $procname __$procname
proc $procname args [string map [list %TEXT% $text %PROC% $procname] {
if {$args == "--help"} {
puts {%TEXT%}
} else {
set script [linsert $args 0 __%PROC%]
return [uplevel 1 $script]
}
}]
}
:
は、ここに1つの単純な実装です。それがそうでなければ、それは元の関数を実行します。これを同じ関数で2回呼び出さないように注意してください(それは動作するように変更することができます)。
ですから、のようなものを行うことができます:あなたが呼び出す場合
proc foo {} {puts 2}
document foo {Prints the number 2.}
:今すぐ
foo --help
、それだろう出力:
Prints the number 2.
このコードは実際には機能しませんでした。 – amateur
作業する必要があります。ここに投稿する前に私のマシンでテストしました。どのようなtclのバージョンを使用していますか? – slebetman
procがラップされていないと思うように 'return [uplevel 1 [list __%PROC%{*} $ args]]'にする方が良いでしょう。また、8.6の ''%CORCES''の ''%args'は ''%\ 'を呼び出すだけです。 –