2016-09-15 3 views
0

最近、パッケージのrequireが既存のパッケージ名ではなく、auto_pathのpkgIndexファイルの1つがパッケージにrequireが含まれていて、既存のパッケージでない場合、tclPkgUnknownが無限再帰を入力することが判明しました。 pkgIndexからパッケージrequireを評価することができないのでしょうか、これは隠れたバグですか?package requires inside pkgIndex

+1

pkgIndexファイルに 'package require'があるのはなぜですか?これはpkgIndexファイルの誤用であり、バグではありません。 –

+0

システム内で、すべてのtclファイルをフォームパッケージに暗号化しておく必要がありますEncr dencryptAndEval {暗号化されたスクリプト} – ArmanHunanyan

+0

tclパッケージに関するドキュメントは、https://www.tcl.tk/man/tcl8.5よりも有益です/tutorial/Tcl31.html。特に、C++コードのtclパッケージを作成する方法 – ArmanHunanyan

答えて

1

pkgIndex.tclファイルは、決してpackage requireで実行しないでください。 package ifneededを呼び出して、パッケージ管理システムにを伝えて、特定のパッケージの特定のバージョンをロードする方法をに伝える必要があります。これは、インデックス・スクリプトが、パッケージのディスカバリー時にはかなり異なる時にロードされるためであり、必ずしもそのパッケージのバージョンが本当に必要な時ではないからです。このルールに固執すれば、問題はありません。

ここには、そこにあるべきものがあります。

# Maybe some comments here? 
package ifneeded Foo 1.2.3 [list source [file join $dir foo.1-2-3.tcl]] 

$dir?これは、便宜上、インデックスファイルを含むディレクトリの名前です。 (これは実際にはローカル変数でもあり、インデックスファイルはの内部でのプロシージャコンテキストと評価されます)