Поскольку в Ruby методы не являются лямбда-выражениями (как, например, в JavaScript).
Методы всегда принадлежат объектам, могут быть унаследованы (путем подклассификации или смешивания), могут быть перезаписаны вСобственный класс объекта и может быть дан блок (который является лямбда).У них есть своя область видимости для переменных.Пример определения метода:
a = :some_variable
def some_method
# do something, but not possible to access local variable a
end
# call with:
some_method
Однако лямбда-выражения / процедуры являются простыми замыканиями, возможно, хранятся в переменной - ничего больше:
a = :some_variable
some_lambda = lambda{
# do something, access local variable a if you want to
}
# call with:
some_lambda[]
Ruby сочетает, например, оба подхода с мощным синтаксисомПроходные блоки:
def some_method_with_block(a)
# do something, call given block (which is a lambda) with:
yield(a) ? 42 : 21
end
# example call:
some_method_with_block(1) do |x|
x.odd?
end #=> 42