Можно вызвать лямбду из другой лямбды:
first = -> { 'Ok' }
second = -> { first.call }
puts second.call
# => 'Ok'
, но при обратном порядке:
first = -> { second.call }
second = -> { 'Ok' }
puts first.call
код завершается ошибкой с NameError
:
lambda_order.rb:1:in `block in <main>': undefined local variable or method `second' for main:Object (NameError)
Did you mean? send
from lambda_order.rb:3:in `<main>'
, хотя :second
кажется локальной переменной внутри области действия first
:
first = -> { local_variables }
second = -> { 'Ok' }
p first.call
# => [:first, :second]
Я использую лямбды только для целей игры в гольф , поэтому я 'Я не уверен, что происходит с областью.Замена second
методом или постоянной лямбда-кодом исправляет NameError
.Кажется, это связано с вопросом , но в моем случае обе лямбды определены в main
.
Не могли бы вы объяснить?