📜  Ruby – 单例方法

📅  最后修改于: 2022-05-13 01:55:48.855000             🧑  作者: Mango

Ruby – 单例方法

Ruby 的单例方法是只能为特定对象定义的方法,即它适用于单个对象。这些类型的方法属于单例类或特征类,并且仅可用于单个对象,这与可用于类的所有实例的其他方法不同。

当对象需要拥有该类的其他对象不拥有的某些独特行为或方法时,此功能更有用。
句法:

def Obj.GFG
# Method body 
end

在这里,GFG 是一个单例方法,而 Obj 是一个对象。
单例方法的概念可以通过下面的例子来理解:
示例 1:

# Ruby program to demonstrate the use 
# of singleton methods
class Vehicle
  def wheels
    puts "There are many wheels"
  end
end
  
# Object train
train = Vehicle.new 
  
# Object car
car = Vehicle.new   
  
# Singleton method for car object
def car.wheels   
  puts "There are four wheels"
end
  
puts "Singleton Method Example"
puts "Invoke from train object:"
train.wheels         
puts "Invoke from car object:"
car.wheels

输出:

Singleton Method Example
Invoke from train object:
There are many wheels
Invoke from car object:
There are four wheels

解释:
可以看到,对于 Vehicle 类的 car 对象,方法wheels 已经被重新定义。这种车轮方法只不过是一种显示汽车不同行为的单例方法。

示例 2:

# Ruby program to demonstrate the use 
# of singleton methods
o1 = String.new 
  
# object1(o1)
o1 = "GeeksforGeeks"
o2 = String.new 
  
# object2(o2)
o2 = "GoodExample"
  
# Singleton method of object o2 
def o2.size     
 return "Size does not matter"
end
   
puts "Singleton Method Example:"
puts "Invoke from the object(o1):"
  
# Returns the size of string "Example1"
puts o1.size 
puts "Invoke from the object(o2):"
  
# Returns the o2.size method’s
# return statement
puts o2.size 

输出:

Singleton Method Example:
Invoke from the object(o1):
13
Invoke from the object(o2):
Size does not matter

解释:
可以为 String 等库类的对象定义 Singleton 方法。上面的代码不是打印对象 o2 的大小,而是打印“大小无关紧要!”因为这是 o2.size 方法的返回值。