루비

2013-08-24 2 views
1

중첩 된 블록의 로컬 변수를 액세스 내가 X = 닐 받기위한 시나리오루비

func1 do 
    x='abc' 
    func2 do 
    puts x 
    end 
end 

있다. 왜 그런가, 그리고 내부 블록에서 x와 같은 외부 변수에 접근하는 법.

+4

? 그것은 그것에 달려 있습니다. iterator 인 경우,'x'는'nil'을 반환하지 않아야합니다. – sawa

+2

sawa가 옳습니다. 예를 들어, 다음과 같습니다 :'Object.new.tap {x = 'abc'; [Object.new] .each {puts x}}'는'abc'를 출력합니다. –

+1

func1 & func2는 http://rubydoc.info/gems/adhearsion/frames의 원초 및 기록 기능입니다. x는 국부적으로 정의 됨 – user2258379

답변

1

func1과 func2가 전달하는 블록을 실행 (생성 또는 호출)하는 경우에만 "abc"가 나타납니다.

체크 아웃 예를 들어`func2`은 무엇입니까

def func1 
end 

def func2 
end 

func1 do 
    x = "Hello World" 
    func2 do 
    puts x 
    end 
end 
#=> nil 

def func3 
    yield 
end 

def func4 
    yield 
end 

func3 do 
    x = "Hello World" 
    func4 do 
    puts x 
    end 
end 
#=> Hello World