我只是想知道在Ruby中调用Procs使用是否有任何好的理由甚至优势proc.call(args),这使得高阶函数语法更加冗长,更不直观.
为什么不proc(args)呢?为什么要区分函数,lambda和块?基本上,这都是一样的,为什么这个令人困惑的语法呢?或者有什么意义,我没有意识到?
Jör*_*tag 11
你需要一些方法来区分调用的Proc,并通过它周围.
在Python和ECMAScript中,它很简单:使用括号它是一个调用,没有它.在Ruby中,省略括号也是一个调用,因此,必须有其他一些方法来区分.
在Ruby 1.8中,Proc#call它的别名Proc#[]服务于这种区别.从Ruby 1.9开始,有一个新的允许方法名称obj.(arg),它被调用obj.call(arg),Proc#()并且也是一个别名Proc#call.
所以,你可以这样打电话Proc:
您甚至可以()为自己的课程定义.
顺便说一句:同样的问题也是你必须使用该method方法来获取方法对象的原因.
在ruby中,您可以拥有一个名为foo的局部变量和方法.假设该方法是私有的,那么调用它的唯一方法是foo(args)(self.foo(args)对于不能有明确接收者的私有方法不起作用).如果ruby允许重载()运算符,那么foo in foo(bar)可以是一个变量,当还有一个名为foo的局部变量时,就没有办法调用私有方法foo.
请注意,对于类似define_method和的功能method_missing,并不总是可以避免使用具有相同名称的方法和局部变量的情况.