Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ruby accessing outer variables in nested function

Tags:

scope

ruby

nested

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 methodx' 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?

like image 858
user102008 Avatar asked Jun 19 '09 05:06

user102008


1 Answers

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) 
like image 147
tadman Avatar answered Sep 22 '22 15:09

tadman