在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