Ruby обращается к внешним переменным во вложенной функции - PullRequest
40 голосов
/ 19 июня 2009

Я уверен, что есть простой ответ на это; Я просто не могу найти это. Я сделал вложенную функцию в 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?

1 Ответ

47 голосов
/ 19 июня 2009

Насколько я знаю, определение именованной функции внутри функции не дает вам доступа ни к каким локальным переменным.

Вместо этого вы можете использовать Proc:

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

foo(5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...