首先,理解类(class
)自身以及类的实例(即对象)是两个不同的概念非常重要。在Ruby中,类也是对象(因为它们是Class
的实例),但它们和通过该类创建的实例对象截然不同。
类(class
)作为接收者:
当类作为接收者时,我们通常是在引用类方法。类方法是直接定义在类对象上的方法,不属于该类的任何单个实例,而是属于类本身。类方法可以被认为是静态方法,它们被调用时不需要一个类的实例。在Ruby中,类方法可以通过多种方式定义,一种常见的方式是在方法名称前面加上 self
关键字。
例如:
class User
# 类方法的定义
def self.describe
"这是一个用户类"
end
end
# 调用类方法
puts User.describe # 输出: 这是一个用户类
在这个例子中,User
是 describe
方法的接收者,因为我们在 User
类对象上调用了 describe
。
类实例作为接收者:
当讨论类的实例作为接收者时,我们通常指的是实例方法。实例方法是定义在类中,但属于该类的每个实例的方法。每个实例可以有它自己的状态(通过实例变量),实例方法通常是用来操作这些状态的。
例如:
class User
# 实例方法的定义
def greet
"Hello, I am a user."
end
end
# 创建一个类的实例
user_instance = User.new
# 调用实例方法
puts user_instance.greet # 输出: Hello, I am a user.
这里,user_instance
即为 greet
方法的接收者,因为它是我们在其上调用 greet
方法的对象。
总结:
简而言之,当你看到一个方法是以这样的形式被调用 SomeClass.some_method
,这意味着SomeClass
是方法的接收者,some_method
是一个类方法。而当你看到方法是以这样的形式被调用 some_instance.some_method
,则 some_instance
是方法的接收者,some_method
是一个实例方法。
类方法和实例方法主要的区别在于它们是如何定义(类方法通常在它们的名称前面有self.
)以及它们是如何被调用(类方法直接通过类调用,实例方法通过该类的实例调用)。理解它们之间的区别对于正确地组织和构建Ruby程序至关重要。