From: matz@... (Yukihiro Matsumoto) Date: 1997-04-03T11:55:19+09:00 Subject: [ruby-list:2579] Re: a mailer written in ruby/Tk まつもと ゆきひろです. In message "[ruby-list:2576] Re: a mailer written in ruby/Tk" on 97/04/03, Akinori ITO writes: |というわけで置いておきました。よろしくおねがいします。 では,移動しておきます. |ところで、tk のプログラムを書いていて気になったことがあります。 |TkButton.new の後のイテレータ |ブロックの中では、インスタンス変数やインスタンスメソッドが使えない |ようです。 そうなんですよ.極めて例外的なんですけど,Tkオブジェクトの newのイテレータの中ではselfの値が変わっています.このため, 参照されるインスタンス変数とメソッドがブロックの中と外で異な る事になっています. 設定が記述しやすくするための方便のつもりなんですけど,やっぱ りひっかりやすいですかねえ. ローカル変数は共有していますから,こういう場合はローカル変数 を使ってください. |class Counter | def initialize | @count = count = 1 | counter = self | @button = TkButton.new { | text count | command proc{ counter.succ } | pack | } | end | def succ | @count += 1 | @button.configure('text',@count) | end |end こんな感じですね. まつもと ゆきひろ /:|)