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