ruby中的面向对象编程

ruby中的面向对象编程,ruby,Ruby,方法是Ruby中的对象吗?我的朋友问了我这个问题。我在网站上读到了这个问题。但我还是不明白。有人能帮我吗?没有 方法本身是Ruby的语言结构,它们不是对象。但是有一个类Method,其实例表示方法,可以使用Method\call调用 此外,还有另一种实例—类UnboundMethod的实例,它们表示从特定对象分离的方法。它们不能直接调用,但可以以多种不同的方式使用 如果您正在寻找类似Javascript的函数s的东西,那么procs和lambda就是您想要的。由于术语方法的模糊性,这里似乎有一个

方法是Ruby中的对象吗?我的朋友问了我这个问题。我在网站上读到了这个问题。但我还是不明白。有人能帮我吗?

没有

方法本身是Ruby的语言结构,它们不是对象。但是有一个类
Method
,其实例表示方法,可以使用
Method\call
调用

此外,还有另一种实例—类
UnboundMethod
的实例,它们表示从特定对象分离的方法。它们不能直接调用,但可以以多种不同的方式使用


如果您正在寻找类似Javascript的
函数
s的东西,那么procs和lambda就是您想要的。

由于术语方法的模糊性,这里似乎有一个混淆。方法在最普通的意义上不是一个对象。在以下方面:

"foo".upcase
方法
upcase
应用于对象
“foo”
,但
upcase
不是对象,这可以从它不能独立的事实看出:

upcase # => error
(当可以认为省略了接收器时,不要将其与此混淆)


但是,有一个类
方法
,其实例对应于方法,并且是对象。它们也可以称为方法,但这不是术语“方法”的正常用法。

Ruby中还有其他“东西”也不是对象,包括操作符、块、
while
for
,毫无疑问还有其他。更准确地说,
“foo”。upcase
将消息
upcase
发送到对象
“foo”
。如果
“foo”
实现了一个同名的方法,它就会被调用。@Aetherus,如果运算符是方法,为什么我们需要术语“运算符”?@Aetherus如果块是方法,为什么我们需要一个符号和来将其转换为进程?@Aetherus:块不是对象-它们没有方法,也不能用Ruby的语法向他们发送任何消息。但它们可以包装在
Proc
对象中。将块传递给方法比构造
Proc
对象并将其作为常规参数传递要快得多;这主要是因为块不需要处理OO开销。类似地,方法不是对象,但可以包装在
Method
UnboundMethod
对象中。