2009-06-19 164 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) 
相关问题