Вопрос по ruby, nested, scope – Ruby обращается к внешним переменным во вложенной функции

40

Я уверен, что для этого есть простой ответ; Я просто не могу найти это. Я сделал вложенную функцию в Ruby, и у меня были проблемы с доступом к переменным из внешней функции внутри внутренней функции:

<code>def foo(x)
  def bar
    puts x
  end
  bar
  42
end

foo(5)
</code>

Я получил:NameError: undefined local variable or methodх & APOS; для основного: Объект`

Аналогичный код Python работает:

<code>def foo(x):
  def bar():
    print x
  bar()
  return 42

foo(5)
</code>

Так как мне сделать то же самое в Ruby?

Важное (но тонкое) различие здесь в том, что def ... end определяет метод, а не функцию. используйте lambda / proc для определения функций и захвата локальных переменных в замыкании, как показывает tadman. rampion

Ваш Ответ

1   ответ
47

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

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

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

foo(5)

Похожие вопросы