在Ruby中,术语 "接收者"(receiver)指的是调用方法的对象。当你在一个对象上调用一个方法时,该对象就是该方法调用的接收者。
例如,在下面这行代码中:
"hello".capitalize
字符串对象 "hello"
是 capitalize
方法的接收者,因为它是我们在其上调用 capitalize
方法的对象。当调用一个方法时,实际上在向接收者发送一条消息(这是Smalltalk语言中的术语,Ruby的很多概念都受其影响),要求执行与该消息对应的方法。
接收者可以是任何类型的对象,包括标准的对象、类对象、模块对象等。比如:
# 在一个数组对象上调用方法,数组是接收者
[1, 2, 3].length # => 3
# 在一个类对象上调用类方法,类是接收者
Array.new # => []
# 在一个模块中调用模块方法,模块是接收者
Math.sqrt(9) # => 3.0
在每个例子中,方法调用都发生在一个接收者上。Ruby的方法总是在一个接收者上被调用,即使没有显式的接收者,这时默认使用的接收者是 self
,self
指向当前的对象或当前的上下文。
在类定义或模块定义中,self
通常是指向当前的类或模块:
class MyClass
def self.class_method
# 这里 self 指向 MyClass,因此是 MyClass 调用了 class_method
end
def instance_method
# 这里 self 指向该类的一个实例
end
end
在调用 MyClass.class_method
时,MyClass
就成了接收者。当你在 MyClass
实例上调用 instance_method
时,该实例则是接收者。
理解接收者的概念对于理解Ruby程序的执行流程至关重要,因为它涉及到Ruby是如何查找和调用方法的,以及如何处理继承、混入模块(Mixins)和作用域。