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的
谢谢
不。
这已经被问了很多次,很多次,很多年了。
YehudaKatz写了一篇关于Ruby的博客文章,标题是Ruby不是一种面向调用的语言(它是面向对象的),这个标题说明了Ruby社区对此的看法。Ruby以对象为中心,而不是函数。消息发送是基本操作,而不是函数调用。
没有显式接收器的消息发送和函数调用之间存在歧义。scala通过静态类型来解决这种歧义,但是ruby不能解决,因此歧义只通过不进行函数调用来解决,或者使用不同的函数调用语法(