2

この Tcl スクリプトを使用すると、次のようになります。A.tcl

itcl::class ::A {
    variable list1 {}
    public method getList {} {
        return $list1
    } 
}

私はこれをします:

  • Tcl シェルを開始し、対話的に行うsource A.tcl
  • getList次に、メソッドに変更を加えますA.tcl
  • 変更を有効にするためにsource、ファイルを再作成しますA.tcl
  • 再実行するとsource、次のエラーが表示されます
% source /home/manid/scripts/test.tcl
クラス「A」はすでに存在します

どうすればこのエラーを克服できますか? シェルを終了せずにクラス定義の最新の変更を取得する方法はありますか?

4

1 に答える 1

1

コードを多少異なる方法で記述する必要があります。特に、メソッドの本体の定義 (繰り返し可能) をクラスの宣言 (繰り返し不可) の外に置く必要があります。次に、(itcl::is classテスターとして)条件付きクラスの作成を行い、itcl::body実際にメソッド定義を提供するために使用します。

これらの原則に従って、次のように書き換えますA.tcl

if {![itcl::is class ::A]} {
    itcl::class ::A {
        variable list1 {}
        # *Dummy* method body; method must exist, but may be empty
        public method getList {} {}
    }
}

itcl::body ::A::getList {} {
    return $list1
}

必要に応じsourceてメソッド本体を何度も変更できます。これにより、すべてを自由に変更できるわけではありません (たとえば、変数宣言とスコープ規則は固定されています)。そのような柔軟性を得るには、TclOO のようなものに切り替える必要があります。

于 2014-05-20T21:25:50.077 に答える