Ruby函数与方法

在Ruby Programming Language ,第6章(第2段)中,他们指出:

许多语言区分没有关联对象的函数和在接收器对象上调用的方法。 因为Ruby是纯粹面向对象的语言,所以所有方法都是真正的方法,并且至少与一个对象相关联。

然后在第6段的中间:

procs和lambdas都是函数而不是在对象上调用的方法。

我对这些陈述有点困惑。 Ruby是纯粹的纯OO,因此没有与对象无关的函数(如果这是纯OO的有效定义),或者是与Proc对象关联的procs / lambdas? Ruby中的函数和方法有什么区别?

任何帮助解析和理解这将是值得赞赏的。

Ruby中的lambda是Proc类的对象。 Proc对象不属于任何对象。 调用它们时不将它们绑定到对象。

方法是MethodUnboundMethod类的对象,具体取决于它们是绑定还是未绑定。 请参阅此处的说明。 在绑定到对象之前,无法调用未绑定的方法。

 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到对象,然后调用它。 但是你根本无法bind Proc bind到一个对象上。 但是, Proc对象可以捕获周围范围内的局部变量,从而成为闭包。

Procs和lambdas都是自己的对象,有一个call方法实际上调用与proc(或lambda)相关联的块。 但是,Ruby提供了一些语法糖来调用它们而不需要显式调用call

我认为区别在于方法和一阶函数,即。 可以作为值传递的函数。