Jos*_*all 27 ruby methods lambda function
在Ruby Programming Language第6章(第2段)中,他们指出:
许多语言区分没有关联对象的函数和在接收器对象上调用的方法.因为Ruby是纯粹面向对象的语言,所以所有方法都是真正的方法,并且至少与一个对象相关联.
然后在第6段的中间:
procs和lambdas都是函数而不是在对象上调用的方法.
我对这些陈述有点困惑.Ruby是纯粹的纯OO,因此没有与对象无关的函数(如果这是纯OO的有效定义),还是与Proc对象关联的procs/lambdas?Ruby中的函数和方法有什么区别?
任何解析和理解这一点的帮助将不胜感激.
Bri*_*per 21
lambda
Ruby中的s是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
Run Code Online (Sandbox Code Playgroud)
您可以bind
在UnboundMethod
一个对象,然后调用它.但你根本不能bind
成为Proc
一个对象. Proc
但是,对象可以捕获周围范围内的局部变量,从而成为闭包.
归档时间: |
|
查看次数: |
13265 次 |
最近记录: |