スクリプトレベルでOOしたいと思ったんですが、なぜかRubyに食指が動かないのでincrTclで少しサンプルコードを書いています。
incrTclは結構有名な拡張で、継承や非公開メソッドとか、クラス変数、クラスメソッド、とかも使えるようで、C++的な事は一通りできるようです。
簡単なクラスを書いててちょっとはまったのが、commandなどでよくあるグローバルな名前解決ができないというありがちなアレです。↓こんな風にしてプライベートなメソッドやクラスメソッドにアクセスします。
incrTclは有名な拡張で、継承や非公開メソッドとか、クラス変数、クラスメソッド、とかも使えるようで、C++的な書きかたでOOできるようになります。
***その1(基本) [#j5380db0]
package require Itcl
namespace import itcl::*
class Man {
variable _name ""
constructor {name} {
set _name $name
}
method greet {} {
puts "Hello, My name is $_name"
}
}
Man he "Joe"
he greet
find objects -class Man
delete object he
package require Tk
package require Itcl
namespace import itcl::*
wm withdraw .
***その2 [#jaa45236]
package require Tk
package require Itcl
namespace import itcl::*
wm withdraw .
class Win {
variable name
constructor {args} {
set name .[string trimleft $this {::}]
toplevel $name
button $name.pr -text proc -command [code procPuts]
button $name.mt -text method -command [code $this methodPuts]
pack $name.pr $name.mt -side left
}
destructor {
destroy $name
}
#クラスメソッド
private proc procPuts {} {
puts aaa
}
#メソッド
private method methodPuts {} {
puts bbb
}
}
tclsh から起動して、sourceして、
Win winA
とかするとwinAのウィンドウがでるので、ボタンを押してみてください。
codeというのは、コマンドの名前空間をキャプチャーするitclのコマンドです。変数の名前空間をキャプチャするときはscopeというコマンドがあります。
----
[[CategoryTclTk]]
HTML convert time: 0.002 sec.