0

どのパッケージですべての tcl コマンドが利用可能になるか知りたいです。たとえば、文字列、リストなど。

expect を使用したい場合は、 Expect package を使用します。同様に、 package をインポートせずにこれらの ( string 、 list など ...) コマンドを使用しています。これらがすべてどのパッケージに属しているか知りたいですか?

基本的に私はJavaから来ました... Javaの「java.lang」パッケージのデフォルト。

4

2 に答える 2

1

正式には、Tcl 言語のコアを形成するすべてのコマンドがTclパッケージによって提供されます。そのパッケージは、コードを実行する前にpackage必要です (コマンド自体はそれらのコマンドの 1 つです)。歴史的な慣例により、Tcl コマンドの大部分は、すべてのネームスペースのコマンド解決パス上にあるグローバル ネームスペースに配置されます。(明示的に で設定しない限り、論理的にはパスの最後になりますnamespace path。) 一部の Tcl コマンドは::tcl名前空間で定義されています。これには、サポートされていない直接アクセスがサポートされていないかなりの数の内部コマンドが含まれます (文書化されていない場合は、サポートされていません)。 ; 一部は明示的にサポートされていませんが、それでも比較的よく知られています。::tcl::unsupported名前空間)。名前空間::oo(およびその子) は TclOO 用に予約されています。

他のパッケージ (特に新しく作成されたパッケージ) によって定義されたコマンドは、パッケージと同じ名前の名前空間に配置する必要があります。これは単なる規則であり、既存のスクリプトとの下位互換性を維持することがより重要であると考えられているため、古いパッケージ (特に Tk や TclX などの名前空間メカニズムよりも前のもの) では従われていませんが、間違いなく見つけることができます。それに従えば簡単です。また、他のパッケージによる汚染の程度にもかかわらず、グローバル名前空間は主にユーザー定義アプリケーションに属するというのが通常の慣習です。あなたが適切だと思うようにマングルするのはあなた次第です。

名前空間のエクスポートされたコマンド(通常、同じ名前のパッケージのパブリック コマンドである必要があります) は、修飾なしで別の名前空間で使用できるようにすることができますnamespace import

namespace eval ::foo {
    proc grill {} { puts "grill!" }
    namespace export grill
}

namespace eval ::bar {
    namespace import ::foo::grill
    grill
    puts [namespace which grill];   # Prints ::bar::grill
    puts [namespace origin grill];  # Prints ::foo::grill
}

別の方法として (Tcl 8.5 から) 名前空間の解決パスを更新して、別の名前空間も参照するようにすることができます。

namespace eval ::foo {
    proc grill {} { puts "grill!" }
}

namespace eval ::bar {
    namespace path ::foo
    grill
    puts [namespace which grill];   # Prints ::foo::grill
    puts [namespace origin grill];  # Prints ::foo::grill
}

2 つのメカニズムは少し異なることに注意してください。インポートされたコマンドでは、コマンドのローカル デリゲートがあります (そして、そのデリゲートは実際にはコマンドであるため、renameそれを行うことができます)。一方、パスの変更では、そのようなデリゲートはありません。元の名前空間のコマンドはgrill、そのコンテキストでの意味の解決中に直接配置されます。

于 2013-09-12T08:30:13.177 に答える
0

リストと文字列は、特別なパッケージには含まれません。これらは基本的なコマンドです。すべての変数は、tcl では文字列として扱われます。

  $ tclsh
  % set l [list 1 2 3 4 5]
  1 2 3 4 5
  % lappend l 6
  1 2 3 4 5 6
  % set str "Hello, World"
  Hello, World
于 2013-09-12T07:28:11.543 に答える