一些 Ruby Dynamic Features 記事 (2) singleton class

在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

Leave a Reply