在Ruby中调用类似方法的对象

Calling objects like methods in ruby

调用像方法这样的对象是否可能(无论如何,无论多么奇怪或丑陋)。我不是在谈论方法对象或调用对象的方法,我的意思是:

1
2
3
4
5
6
7
8
9
10
class Klass
  def callMeMethod *args
    p args
  end
end

myObject = Klass.new

myObject *args  #=> [arg0, arg1, ...]
myObject(*args) #=> [arg0, arg1, ...]

我曾考虑过每次创建对象时都定义一个新的全局方法(不必担心有多糟糕),但我遇到了问题,而且理想情况下,我希望调用它,即使它是从以下表达式返回的:

1
2
someArray[index_of_my_object] *args  #=> [arg0, arg1, ...]
someArray[index_of_my_object](*args) #=> [arg0, arg1, ...]

所以基本上是python的__call__方法。

谢谢


不。

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

YehudaKatz写了一篇关于Ruby的博客文章,标题是Ruby不是一种面向调用的语言(它是面向对象的),这个标题说明了Ruby社区对此的看法。Ruby以对象为中心,而不是函数。消息发送是基本操作,而不是函数调用。

没有显式接收器的消息发送和函数调用之间存在歧义。scala通过静态类型来解决这种歧义,但是ruby不能解决,因此歧义只通过不进行函数调用来解决,或者使用不同的函数调用语法(foo.(bar)而不是foo(bar)来解决。