理解 Ruby 中的类 << self
Nurudeen Ibrahim
2023年1月30日
在 Ruby OOP 中,class << self
是你经常遇到的语法。它通常用于定义类方法。
在本文中,我们将了解 class << self
语法以及为什么使用它来定义类方法。
Ruby 中的实例方法和类方法
实例方法和类方法是 Ruby 最常见的两种方法类型。
示例代码:
class Employee
def initialize(last_name, first_name)
@last_name = last_name
@first_name = first_name
end
def full_name
"#{@first_name} #{@last_name}"
end
def self.company_name
"Ruby LLC"
end
end
employee1 = Employee.new("Mark", "David")
puts employee1.full_name
puts Employee.company_name
输出:
David Mark
Ruby LLC
full_name
是上面示例中的 instance
方法,company_name
是 class
方法。full_name
特定于 Employee
的一个实例,而 company
应该为类的每个实例返回相同的值,定义为 self.company_name
。
示例中的 self
指的是类本身,因此,我们也可以将其写为:
class Employee
def Employee.company_name
"Ruby LLC"
end
end
Ruby 中的 singleton
方法
还有另一种方法称为 singleton
,它仅针对特定对象定义。它通常用于图形用户界面 (GUI) 设计,其中不同的元素需要采取不同的操作。
如下所示,我们可以为 employee1
对象编写一个单例方法。
示例代码:
class Employee
def initialize(last_name, first_name)
@last_name = last_name
@first_name = first_name
end
def full_name
"#{@first_name} #{@last_name}"
end
def self.company_name
"Ruby LLC"
end
end
employee1 = Employee.new("Mark", "David")
def employee1.responsiblity
"Handle recruitment"
end
puts employee1.responsiblity
输出:
Handle recruitment
下面是上面代码的另一种写法:
示例代码:
class Employee
def initialize(last_name, first_name)
@last_name = last_name
@first_name = first_name
end
def full_name
"#{@first_name} #{@last_name}"
end
def self.company_name
"Ruby LLC"
end
end
employee1 = Employee.new("Mark", "David")
class << employee1
def responsiblity
"Handle recruitment"
end
end
puts employee1.responsiblity
输出:
Handle recruitment
上面的例子是 class << self
发挥作用的地方,上面例子中的 self
指的是 employee1
对象。
因此,我们可以重写 Employee
类以使用 class << self
语法来定义其类方法。
示例代码:
class Employee
def initialize(last_name, first_name)
@last_name = last_name
@first_name = first_name
end
def full_name
"#{@first_name} #{@last_name}"
end
class << self
def company_name
"Ruby LLC"
end
end
end
employee1 = Employee.new("Mark", "David")
puts Employee.company_name
输出:
Ruby LLC