lambda
s в Ruby являются объектами класса Proc. Proc
объекты не принадлежат ни одному объекту. Они вызываются без привязки их к объекту.
Методы - это объекты класса Method
или UnboundMethod
, в зависимости от того, связаны они или нет. См. Объяснение здесь . Несвязанные методы нельзя вызывать, пока они не связаны с объектом.
lambda{|x| x}.class # => Proc
lambda{|x| x}.call(123) # => 123
class Foo
def bar(baz)
baz
end
end
puts Foo.new.method(:bar).class # => Method
puts Foo.new.method(:bar).call(123) # => 123
puts Foo.instance_method(:bar).class # => UnboundMethod
puts Foo.instance_method(:bar).call(123) # => throws an exception
Вы можете bind
и UnboundMethod
к объекту, а затем вызвать его. Но вы не можете bind
a Proc
к объекту вообще. Однако Proc
объекты могут захватывать локальные переменные в окружающей области видимости, становясь замыканиями.