我只是想知道在 Ruby 中必须使用 proc.call(args)
调用 Proc
是否有任何充分的理由甚至优势,这使得更高-order 函数语法更冗长且更不直观。
为什么不只是 proc(args)
?为什么要区分函数、lambda 和 block ?基本上,它们都是一样的,那么为什么要使用这种令人困惑的语法呢?或者有什么我没有意识到的意义吗?
最佳答案
您需要一些方法来区分调用Proc
和传递它。
在 Python 和 ECMAScript 中,这很简单:有括号就是调用,没有括号就不是。在 Ruby 中,省略括号也是一个调用,因此,必须有一些其他方式来区分。
在 Ruby 1.8 中,Proc#call
及其别名 Proc#[]
起到了这种区别的作用。从 Ruby 1.9 开始,obj.(arg)
是 obj.call(arg)
的语法糖,Proc#()
是 也是 Proc#call
的别名。
因此,您可以这样调用 Proc
:
- foo.call(1, 2, 3)
- foo[1, 2, 3]
- foo.(1, 2, 3)
您甚至还可以为您的自己的 类定义()
。
顺便说一句:同样的问题也是为什么您必须使用 method
方法来获取方法对象的原因。
关于ruby - 为什么 Ruby 需要 .call 来调用 Proc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1961863/