Подтвердить что ты не робот

Ruby, обращающийся к внешним переменным во вложенной функции

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

def foo(x)
  def bar
    puts x
  end
  bar
  42
end

foo(5)

Я получаю: NameError: undefined local variable or method x 'для main: Object`

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

def foo(x):
  def bar():
    print x
  bar()
  return 42

foo(5)

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

4b9b3361

Ответ 1

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

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

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

foo(5)