Ruby中单例类的5种声明方式

一个匿名类(Anonymous Class)也被称作单例类(Singleton Class),特征类(Eigenclass),鬼魂类(Ghost Class),元类(Metaclass)或者uniclass。

Ruby中每个对象都有其自己的匿名类,一个类能拥有方法,但是只能对该对象本身其作用:当我们对一个具体的对象添加方法时,Ruby会插入一个新的匿名类于父类之间,来容纳这个新建立的方法。值得注意的是,匿名类通常是不可见(Hidden)的。它没有名字因此不能像其他类一样,通过一个常量来访问。你不能为这个匿名类实例化一个新的对象。

  下面展示了建立匿名类的一些方法:


# 1
class Rubyist
  def self.who
    "Geek"
  end
end

# 2
class Rubyist
  class << self
    def who
      "Geek"
    end
  end
end

# 3
class Rubyist
end
def Rubyist.who
  "Geek"
end

#4
class Rubyist
end
Rubyist.instance_eval do
  def who
    "Geek"
  end
end
puts Rubyist.who # => Geek

# 5
class << Rubyist
  def who
    "Geek"
  end
end

 上述5段代码,分别定义了Rubylist.who方法,该方法返回”Geek”。

  任何时候,一旦你看到如上述标号为#5的代码,class关键字后面紧接着«,你就应该确信这里为«右边的对象打开了一个匿名类。

来源

Mark24

Everything can Mix.