Не совсем! return
внутри блока отличается от return
внутри лямбды, как упоминалось в моем ответе . Когда вы return
из блока, вы возвращаетесь из всего метода, а не из блока.
Мы можем проиллюстрировать это следующим образом:
return :foo # => LocalJumpError: unexpected return
[1, 2, 3].map { return :foo } # => LocalJumpError: unexpected return
[1, 2, 3].map { :foo } # => [:foo, :foo, :foo]
Обычно этого не происходит с лямбдами:
l = lambda { return :foo }
l.call # => :foo
[1, 2, 3].map { l.call } # => [:foo, :foo, :foo]
Но когда мы пытаемся передать лямбду как блок методу, поведение снова меняется:
[1, 2, 3].map &l # => LocalJumpError: unexpected return