调用像ruby

时间:2017-04-15 11:23:30

标签: ruby methods call

(以任何方式,无论多么奇怪或丑陋)可以像对待方法一样调用对象。 我不是在谈论方法对象或调用对象的方法,我的意思是:

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__方法。

感谢

1 个答案:

答案 0 :(得分:1)

没有

多年来,这已经被问过很多次了。

Yehuda Katz写了一篇关于它的博客文章,标题为Ruby is NOT a Callable Oriented Language (It's Object Oriented),标题几乎说明了Ruby社区对此的看法。 Ruby以对象为中心,而不是函数。消息发送是基本操作,而不是函数调用。

在没有显式接收器的消息发送和函数调用之间存在歧义。 Scala通过静态类型解决了这种歧义,但Ruby无法做到这一点,因此通过不进行函数调用,或者通过使用不同的函数调用语法(foo.(bar)而不是{{1})来简单解决歧义。 })。