Tcl-tk-tcl-namespaces
提供:Dev Guides
Tcl-名前空間
名前空間は、変数とプロシージャをグループ化するために使用される識別子のセットのコンテナです。 名前空間はTclバージョン8.0から利用できます。 名前空間の導入前には、単一のグローバルスコープがありました。 名前空間を使用して、グローバルスコープのパーティションを追加しました。
名前空間の作成
名前空間は、 namespace コマンドを使用して作成されます。 名前空間を作成するための簡単な例を以下に示します-
#!/usr/bin/tclsh
namespace eval MyMath {
# Create a variable inside the namespace
variable myResult
}
# Create procedures inside the namespace
proc MyMath::Add {a b } {
set ::MyMath::myResult [expr $a + $b]
}
MyMath::Add 10 23
puts $::MyMath::myResult
上記のコードが実行されると、次の結果が生成されます-
33
上記のプログラムでは、変数 myResult とプロシージャ* Add。*を含む名前空間があります。これにより、異なる名前空間で同じ名前の変数とプロシージャを作成できます。
入れ子になった名前空間
Tclでは、名前空間をネストできます。 ネスト名前空間の簡単な例を以下に示します-
#!/usr/bin/tclsh
namespace eval MyMath {
# Create a variable inside the namespace
variable myResult
}
namespace eval extendedMath {
# Create a variable inside the namespace
namespace eval MyMath {
# Create a variable inside the namespace
variable myResult
}
}
set ::MyMath::myResult "test1"
puts $::MyMath::myResult
set ::extendedMath::MyMath::myResult "test2"
puts $::extendedMath::MyMath::myResult
上記のコードが実行されると、次の結果が生成されます-
test1
test2
名前空間のインポートとエクスポート
前の名前空間の例をご覧ください。多くのスコープ解決演算子を使用していますが、使用するのはより複雑です。 これを回避するには、名前空間をインポートおよびエクスポートします。 以下に例を示します-
#!/usr/bin/tclsh
namespace eval MyMath {
# Create a variable inside the namespace
variable myResult
namespace export Add
}
# Create procedures inside the namespace
proc MyMath::Add {a b } {
return [expr $a + $b]
}
namespace import MyMath::*
puts [Add 10 30]
上記のコードが実行されると、次の結果が生成されます-
40
名前空間を忘れる
*forget* サブコマンドを使用して、インポートされたネームスペースを削除できます。 簡単な例を以下に示します-
#!/usr/bin/tclsh
namespace eval MyMath {
# Create a variable inside the namespace
variable myResult
namespace export Add
}
# Create procedures inside the namespace
proc MyMath::Add {a b } {
return [expr $a + $b]
}
namespace import MyMath::*
puts [Add 10 30]
namespace forget MyMath::*
上記のコードが実行されると、次の結果が生成されます-
40