在Ruby中,singleton method指的是只有該物件才有的方法,而加在 Class object 上的 singleton method 也就變成了 class method。
假設目前有以下的程式碼:
class Dragon end dran = Dragon.new
我想定義物件方法 dran.foo
#法一
class Dragon
def n
puts "nnn"
end
end
#法二
Dragon.class_eval do
def foo
puts "bar"
end
end
我想定義只有這個物件才有的方法 dran.foo (叫做 singleton method)
#法一
class << dran
def foo
puts "bar"
end
end
drag.foo
#法二
drgn.instance_eval do
def foo
puts "bar"
end
end
#法三
def dran.foo
puts "bar"
end
我想定義類別方法 Dragon.foo (class methods)
#法一
class << Dragon
def foo
puts "bar"
end
end
#法二
class Dragon
def self.foo
puts "bar"
end
end
#法三
class Dragon
class << self
def foo
puts "bar"
end
end
end
#法四
Dragon.instance_eval
def foo
puts "bar"
end
end
#法五
Dragon.class_eval do # 這裡改用 instance_eval 也可以耶(why?)
def self.foo
puts "bar"
end
end