Most instance methods used in Ruby are global methods. That means they are available in all instances of the class on which they were defined. In contrast, a singleton method is implemented on a single object.
存在着明显的矛盾。 课程和所有方法都必须与班级挂钩。 单一州方法所定义的物体不是一类(即一类)。 如果只有课堂能够储存方法,那么物体如何储存单一吨方法? 当采用单一吨方法时,Ruby自动创立了一个匿名类别来储存这种方法。 这些匿名课被称为美术,也称为单州级或单体。 单一吨法与甲型六氯环己烷相关,后者与单一吨方法所定义的物体有关。
如果在单一物体内界定多种单吨方法,则所有方法都储存在同一元。
class Zen
end
z1 = Zen.new
z2 = Zen.new
def z1.say_hello # Notice that the method name is prefixed with the object name
puts "Hello!"
end
z1.say_hello # Output: Hello!
z2.say_hello # Output: NoMethodError: undefined method `say_hello …
在上述例子中,在Zent族Z1级的案例中界定了“hello”方法,而不是“z2”类。
下面的例子表明,对单一州方法的定义有不同,结果相同。
class Zen
end
z1 = Zen.new
z2 = Zen.new
class << z1
def say_hello
puts "Hello!"
end
end
z1.say_hello # Output: Hello!
z2.say_hello # Output: NoMethodError: undefined method `say_hello …
在上述例子中,甲型六氯环己烷和乙型六氯环己烷;z1 改变目前的自称水平,以标明甲型六氯环己烷的甲型六氯环己烷;然后界定甲型六氯环己烷的 say。
上述两个例子都说明了单一州的方法如何运作。 然而,界定单一吨方法比较容易:使用一种称为“方法”的内在方法。
class Zen
end
z1 = Zen.new
z2 = Zen.new
z1.define_singleton_method(:say_hello) { puts "Hello!" }
z1.say_hello # Output: Hello!
z2.say_hello # Output: NoMethodError: undefined method `say_hello …
我们早些时候了解到,这些班级也属于物体(属于所谓“级”的建筑班)。 我们还了解到阶级方法。 Class methods are no than oneton methods associated with a category Object.
还有一个例子:
class Zabuton
class << self
def stuff
puts "Stuffing zabuton…"
end
end
end
所有的物体均可能都有美分。 这意味着,班级也可以有美分。 在上述例子中,阶级和带;以及自食其力的自我修饰,从而标明Zabuton阶级的阶级。 如果在没有明确接收人的情况下界定某种方法(该方法所定义的类别/目标),则该方法在目前范围内即目前自我价值范围内被默示界定。 因此,在Zabuton阶级的子体内界定了 st子方法。 以上例子只是确定一种等级方法的另一个途径。
更多读到