의 직접 코드에 가자 :블록 내에서 변수를 변경할 수 있습니까?
여기#!/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
우리는 여기에 다른 동작을 볼 이유는 무엇입니까?
고마워, 카츠. 네가 한 모든 말을 소화 할 시간이 필요해. – pierrotlefou