Ruby accessing outer variables in nested function

nested, ruby, scope

Solution

As far as I know, defining a named function within a function does not give you access to any local variables.

What you can do instead is use a Proc:

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

foo(5)

Problem

I'm sure there's a simple answer for this; I just can't seem to find it. I made a nested function in Ruby, and I was having trouble accessing variables from the outer function inside the inner function: ``` def foo(x) def bar puts x end bar 42 end foo(5) ``` I get: `NameError: undefined local variable or method`x' for main:Object` The analogous Python code works: ``` def foo(x): def bar(): print x bar() return 42 foo(5) ``` So how do I do the same thing in Ruby?

Original source