の直接コードに行こう:ブロック内で変数を変更できますか?
ここ#!/usr/bin/ruby
require 'tk'
class Epg
def initialize
@var = "bad"
@cvs = nil
@items_demo = TkRoot.new() {title "EPG"}
TkFrame.new(@items_demo) {|cf|
@var = "good"
@cvs = TkCanvas.new(cf) {|c|}
puts "@cvs 1 is #{@cvs}"
puts "@var 1 is #{@var}"
}.pack('side'=>'top', 'fill'=>'both', 'expand'=>'yes')
puts "@cvs 2 is #{@cvs}"
puts "@var 2 is #{@var}"
end #initialize
def test
@var = "bad"
puts " @var 3 :#{@var}"
(1..3).each {|x| @var="good"}
puts " @var 4 :#{@var}"
end
end
e= Epg.new
e.test
が出力されます。
@cvs 1 is #<Tk::Canvas:0xb7cecb08>
@var 1 is good
@cvs 2 is
@var 2 is bad #@var has NOT been changed by the code in the block
@var 3 :bad
@var 4 :good #@var has been changed by the code in the block
我々は、ここでは異なる動作を参照してくださいなぜ?
ありがとう、Katz。あなたが言ったすべてを消化する時間が必要です。 – pierrotlefou