Because in Ruby, methods are not lambdas (like, for example, in JavaScript).
Methods always belong to objects, can be inherited (by sub-classing or mixins), can be overwritten in an object's eigenclass and can be given a block (which is a lambda). They have their own scope for variables. Example method definition:
a = :some_variable
def some_method
# do something, but not possible to access local variable a
end
# call with:
some_method
However lambdas/procs are plain closures, maybe stored in a variable - nothing else:
a = :some_variable
some_lambda = lambda{
# do something, access local variable a if you want to
}
# call with:
some_lambda[]
Ruby combines both approaches with a powerful syntax, for example, passing blocks:
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