用Ruby进行面向对象编程

3
在Ruby中,方法是否为对象?我的朋友问了我这个问题。我在网站上阅读了相关信息,但仍然不理解。有人可以帮助我吗?
2个回答

5

由于“方法”一词的歧义性,这里似乎存在混淆。在最普通的意义上,“方法”不是一个对象。在下面的例子中:

"foo".upcase

当方法upcase被应用于一个对象"foo"时,upcase并不是一个对象,因为它不能独立存在。
upcase # => error

请不要将其与可能被认为省略了接收器的情况混淆。
然而,有一个名为Method的类,它的实例对应于方法,并且是对象。它们也可以被称为方法,但这不是术语“method”的正常用法。

2
Ruby 中还有其他不是对象的“东西”,包括运算符、块、whilefor 等等,毫无疑问还有其他的。 - Cary Swoveland
1
更准确地说,"foo".upcase 将消息 upcase 发送给对象 "foo"。如果 "foo" 实现了同名的方法,它将被调用。 - Stefan
1
如果操作符是方法,我们为什么还需要“操作符”这个术语呢? - Cary Swoveland
1
如果块是方法,为什么我们需要一个“&”来将其转换为/从proc? @Aetherus - sawa
1
@Aetherus:块不是对象——它们没有方法,也不能在Ruby语法中向它们发送任何方法。但是它们可以被包装在Proc对象中。将块传递到方法中比构造Proc对象并将它们作为常规参数传递要快得多;这主要是因为块不需要处理面向对象的开销。同样,方法不是对象,但可以被包装在MethodUnboundMethod对象中。 - Amadan
显示剩余2条评论

4
不是的。方法本身是Ruby的语言结构,它们不是对象。但有一个类叫做“Method”,它的实例表示方法,并且可以使用“Method#call”进行调用。
此外,还有另一种实例——“UnboundMethod”的实例,它表示与特定对象分离的方法。它们不能直接调用,但可以用于许多不同的方式。
如果你正在寻找类似于JavaScript的“函数”,那么procs和lambdas就是你想要的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接