スクリプトレベルで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]]

|New|Edit|Diff|History|Attach|Copy|Rename|
HTML convert time: 0.002 sec.