重新開啟(猴子修補)Singleton 類
有三種方法可以重新開啟 Singleton 類
- 在單例類上使用
class_eval
。 - 使用
class <<
塊。 - 使用
def
直接在物件的 singleton 類上定義一個方法
class Example
end
Example.singleton_class.class_eval do
def foo
:foo
end
end
Example.foo #=> :foo
class Example
end
class << Example
def bar
:bar
end
end
Example.bar #=> :bar
class Example
end
def Example.baz
:baz
end
Example.baz #=> :baz
每個物件都有一個可以訪問的單例類
class Example
end
ex1 = Example.new
def ex1.foobar
:foobar
end
ex1.foobar #=> :foobar
ex2 = Example.new
ex2.foobar #=> NoMethodError