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

StackOverflow https://stackoverflow.com/questions/1016408

  •  06-07-2019
  •  | 
  •  

Вопрос

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

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

foo(5)

Я получаю: NameError: неопределенная локальная переменная или метод x 'для main: Object`

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

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

foo(5)

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

Это было полезно?

Решение

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

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

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

foo(5)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top