1

tcl で現在のパッケージの名前を見つける方法 (メソッド呼び出し) はありますか??

例えば:

package provides abc

proc A {

// I need to print the package name abc. 

}

ここでのクラス名が明らかに「abc」であることはわかっていますが、それでも tcl コマンドを使用して出力したいと考えています。私はいくつかのデバッグモジュールに取り組んでいるので、これが必要です。(perl が提供するものと同様: __ PACKAGE __ )

4

2 に答える 2

0

パズルのピースがいくつか欠けています。proc Aパッケージの一部であるファイルで宣言したとしても、Aグローバルに作成されます。

このpackageコマンドは、tcl がどのファイルをソースにするかを判断するのに役立ちます。あなたは通常package providenamespace

package provide abc

namespace eval ::abc {
    proc A {} {puts stdout "I am in namespace [namespace current]"}
    proc B {} {..}
    proc C {} {..}
}

この関数を呼び出すには、次のようにします。

::abc::A

の本体の内側から、A使用することで、現在の名前空間を知ることができますnamespace current

これを書く別の方法は次のようになります

namespace eval ::abc {}
proc ::abc::A {} {puts stdout "I am in namespace [namespace current]"}
proc ::abc::B {} {..}
proc ::abc::C {} {..}

パッケージと名前空間の間に 1 対 1 のマッピングはありません。したがって、1 つのパッケージで多くの名前空間を作成できます (または、例のように名前空間がありません)。

ライブラリのビルド方法については、このページをご覧ください: http://www.tcl.tk/man/tcl8.5/tutorial/Tcl31.html

packageおよびhttp://www.tcl.tk/man/tcl8.6/TclCmd/contents.htmの完全な手順については、このページnamespace

于 2016-05-20T04:30:18.053 に答える