2009-06-19 7 views
38

여기에 대한 간단한 대답이있을 것입니다. 나는 그것을 찾을 수없는 것 같습니다. I 얻을중첩 된 함수에서 외부 변수에 액세스하는 Ruby

def foo(x) 
    def bar 
    puts x 
    end 
    bar 
    42 
end 

foo(5) 

: NameError: undefined local variable or method X '메인 님 Object`를

유사한 파이썬 코드 나 루비 중첩 함수를 만들고, I 문제 내부 함수 내에 외부 함수의 변수에 액세스하는 데시켰다 작품 :

def foo(x): 
    def bar(): 
    print x 
    bar() 
    return 42 

foo(5) 

그래서 어떻게 루비에서 같은 일을합니까?

+9

여기서 중요한 (그러나 미묘한) 구분 데프 ... 끝이 방법이 아닌 함수를 정의한다는 것입니다 :

은 당신이 대신 할 수있는 것은 PROC를 사용합니다. tadman이 보여 주듯이 lambda/proc을 사용하여 함수를 정의하고 클로저에서 지역 변수를 캡처합니다. – rampion

답변

44

필자가 아는 한, 함수 내에서 명명 된 함수를 정의한다고해서 로컬 변수에 액세스 할 수있는 것은 아닙니다.

def foo(x) 
    bar = lambda do 
    puts x 
    end 
    bar.call 
    42 
end 

foo(5) 
관련 문제