2016-08-02 6 views
0

/procのにFUNCの名前を変更するが、作業の両方のバージョンを保持します。動作を停止し私は私の目標は、エイリアスにある

rename proc func 

procのため、内蔵のTCLのはコマンドの名前を変更する理由です はオプションではありません。そしてprocは、のような組み込みのコマンドを実行しません。tk_getOpenFileは機能しません。

解決策は、私は初心者だから、この

proc func { arg } { 
    proc $arg 
} 

上記does't作業のようなラッパーを構築するだろうと私は私がやっているかわからないが、理論的にはラッパーがすべき有効な解決策になります。
また、私は上記のやり方を学ぶときにも、名前を変更しようとしますに印刷と置き換えてください。

答えて

2

あなたは通訳の別名を使用することができます。

interp alias {} func {} proc 

ドキュメント: interp

+0

は<完全に働いている非常に詳細な説明と例については、3人の –

2

エイリアスは通常の答えです。しかし、Tclの8.6で、あなたもtailcallを使用することができますなぜuplevel

proc func {name arguments body} { 
    uplevel 1 [list proc $name $arguments $body] 
} 

proc func {name arguments body} { 
    tailcall proc $name $arguments $body 
} 

その前に、右invokationは、この(procは常に空の文字列を返すことを考えると)でしょうか? nameが完全修飾名を参照していない場合は、現在の名前空間の内容が重要なためです。 発信者のコンテキストでの評価を行うことは、「驚くことではありません。 (tailcall付きバージョンもこの権利を処理します。)すべてのことについては


、私は実際に私のプログラムでは、このようなfuncを定義することを好む:

proc func {name arguments body} { 
    tailcall proc tcl::mathfunc::$name $arguments [list expr $body] 
} 

なぜ?これは、「ただ働き」ので:

func cube x { 
    $x ** 3 
} 

set num [expr { cube(17) }] 
+0

おかげで、素晴らしい仕事をありがとう! –

関連する問題