(以任何方式,无论多么奇怪或丑陋)可以像对待方法一样调用对象。 我不是在谈论方法对象或调用对象的方法,我的意思是:
class Klass
def callMeMethod *args
p args
end
end
myObject = Klass.new
myObject *args #=> [arg0, arg1, ...]
myObject(*args) #=> [arg0, arg1, ...]
我想过每次创建一个对象时都要定义一个新的全局方法(从不介意它有多糟糕)但是我遇到了问题,即使从一些表达式返回它,我也希望调用它,例如: / p>
someArray[index_of_my_object] *args #=> [arg0, arg1, ...]
someArray[index_of_my_object](*args) #=> [arg0, arg1, ...]
基本上是Python的__call__
方法。
感谢
答案 0 :(得分:1)
没有
多年来,这已经被问过很多次了。
Yehuda Katz写了一篇关于它的博客文章,标题为Ruby is NOT a Callable Oriented Language (It's Object Oriented),标题几乎说明了Ruby社区对此的看法。 Ruby以对象为中心,而不是函数。消息发送是基本操作,而不是函数调用。
在没有显式接收器的消息发送和函数调用之间存在歧义。 Scala通过静态类型解决了这种歧义,但Ruby无法做到这一点,因此通过不进行函数调用,或者通过使用不同的函数调用语法(foo.(bar)
而不是{{1})来简单解决歧义。 })。