Rubyにおけるクラスメソッドの定義

1367 ワード

Rubyにおけるクラスメソッドの定義
メソッドの受信者は,クラス自体(クラスオブジェクト)のメソッドがクラスメソッドとなる.クラスメソッドのいくつかの形式は次のとおりです.
#1. class <
#2. class      self ,          ,      class << self ~ end   

class ClassMethod
  class << self
    def Hello(name)
      puts "#{name} say hello!"
    end
  end
end
ClassMethod.Hello("Bob")

#3.  def   .    ~end            
class ClassMethod
    def ClassMethod.SayHello(name)
        puts "#{name} say hello"
    end
end
ClassMethod.SayHello("Ruby")
#4.             self
class ClassMethod
  def self.SayHello(name)
    puts "#{name} say hello"
  end
end
ClassMethod.SayHello("Bob")


上の3つの方法だと思ったら大間違いです.インターネットで資料を調べたところ、次のような方法がありました:=.=
class ClassMethod
    ClassMethod.instance_eval do
        def SayHello(name)
            puts "#{name} say hello"
        end
    end
end

extendキーワード拡張クラスメソッドを使用します.
module ClassMethod
  def cmethod
      "Class Method"
  end
end
class MyClass
  extend ClassMethod
end
p ClassMethod.cmethod #=>"Class Method"

クラスメソッド定義:メソッドの受信者はクラス自体のメソッドがクラスメソッドとなる.Rubyでは、すべてのクラス自体がClassクラスのオブジェクトであるため、クラスメソッドを次のように理解することができます.
  • Classクラスのインスタンスメソッド
  • クラスオブジェクトの一例方法