2009-06-19 67 views
38

我確信有一個簡單的答案。我似乎無法找到它。我在紅寶石製成的嵌套函數,我被順利存取內部功能的內部從外部函數的變量:在嵌套函數中訪問外部變量的Ruby

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

foo(5) 

我得到:NameError: undefined local variable or method X」爲主要:Object`

中類似的Python代碼作品:

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

foo(5) 

那麼我該如何在Ruby中做同樣的事情呢?

+9

這裏的一個重要(但細微)的區別是,高清...端限定的方法,而不是一個函數。如tadman所示,使用lambda/proc來定義函數並捕獲閉包中的局部變量。 – rampion 2009-06-19 05:30:28

回答

44

據我所知,在一個函數中定義一個命名函數並不能讓你訪問任何局部變量。

你可以做的反而是使用一個Proc:

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

foo(5) 
相關問題