私は、TCL内の別のプロシージャのスコープ内にのみ存在するプロシージャを作成したいと考えています。
I. 1つのprocだけで呼び出すことができます。出来ますか?この次のリンクによると、 :http://wiki.tcl.tk/463
しかし、誰かがそれを行う別の方法を知っているかもしれません。
ありがとうございます。TCLのローカルプロシージャ
0
A
答えて
0
Tclの哲学は、制限するのではなく有効にしています。プログラマは正しいことをすることが信頼されています。
名前空間、同じインタプリタエイリアス、またはOOをソフト制限手順に使用できます。間違って呼び出すことはできませんが、意図的な操作でもアクセスできます。モジュール手続きはしばしば以下のように制限されている。 struct::matrix
を参照してください。
サンドボックス内でプログラムを実行することによってハード制限する手順は、プロシージャを完全に保留するか、特定の手順から呼び出された場合など、特殊な状況下でのみ呼び出すことができます。その識別子は、ローカルにすることにより手続きへのアクセスを制限する
(一つは、単にチェックし、呼び出し元があるが、それは偽装するのは簡単です手順を書くことができます。)
はTclのdoesnの、レキシカルスコープの機能です使用しないでください。最も近い対応するメカニズムは名前空間です。
1
あなたはそのような手続きを制限することはできませんが、ほぼ同じ良いですラムダ項を使用することができます:ラムダの
proc outside {a b c} {
# Lambda terms are two- or three-element lists.
set inside {{d e f} {
return [expr {$d + $e * $f}]
}}
set total 0
for {set i $a} {$i < $b} {incr i} {
# Lambdas have to be explicitly applied with [apply]
set total [apply $inside $total $c $i]
}
return $total
}
puts [outside 3 7 18]
最初の要素:(proc
用など)、仮引数のリストを
セカンドlambda:bodyの要素(proc
の場合)
ラムダ:コンテキスト名前空間の第3のオプション要素。グローバル名前空間のデフォルト値(::
)
関連する問題
- 1. TCL 8.4.13のTCLバイトコードローダ?
- 2. TCL:\。
- 3. tclスクリプトのregexp
- 4. ctagsのは、Tcl
- 5. のTcl regsubは
- 6. Tcl/Tkのグラフルーチン
- 7. NS2のTCLスクリプトジェネレータ
- 8. TCLのASNパーサ
- 9. TCL:変数で実行するtclコマンド
- 10. Tclクイックリファレンス
- 11. のTcl/Tkのツリービュー
- 12. のTcl/Tkの:クローズトップレベルウィンドウ
- 13. TCL TCL CスレッドとTCLスクリプトスレッドからvwait変数を設定する
- 14. ウィンドウのバータイトルオプションTCL/TK
- 15. トップレベルバーのTcl/Tkバインドマウスクリック
- 16. TCL内のRESTサーバー
- 17. Tcl:オンザフライコマンドの代入
- 18. TCL:プリンタの詳細
- 19. Tclのバイトコードとprocs
- 20. tclに複数のリストのtclリストを作成するには?
- 21. AC_ARG_ENABLEはTCL
- 22. Tclはキー名
- 23. Tcl - encoding convertfrom ascii
- 24. エッグドロップTCLアップタイムスクリプト
- 25. Tcl引き数
- 26. TCLキャンバスPixelmap
- 27. "Tclインタプリタエラー"をキャッチ
- 28. Tcl/Tk GUIアップデート
- 29. TCL構文エラー
- 30. オブジェクト指向TCL