実は回字には7つの書き方があります...


rubyで定義されたクラスメソッドの違いを説明します.
class T
  def T.class_method1
    #   
  end
 class << self
   def class_method2
     #   
   end
  end
  def self.class_method3
    #   
  end
end


def T.class_method4
  #   
end


T.class_eval do
  def T.class_method5
    #   
  end
  def self.class_method6
    #   
  end
end
class Object
  # The hidden singleton lurks behind everyone
  def metaclass; class << self; self; end; end
  def meta_eval &blk; metaclass.instance_eval &blk; end
  # Adds methods to a metaclass
  def meta_def name, &blk
    meta_eval { define_method name, &blk }
  end
end
T.meta_def :class_method7 do 
  #   
end
p T.singleton_methods.sort#["class_method1", "class_method2", "class_method3", "class_method4", "class_method5", "class_method6", "class_method7", "yaml_tag_subclasses?"]


 
区别:个人の感じはメタプログラミングの方式で定义するもっと动态のいくつかの柔软(女の子の、くだらない话!动态の不柔软はメタプログラミングですか)
また、第2の(class<例えばクラスメソッドはpublicだと言う人もいれば、クラスメソッドは別名では使えないと言う人もいます...
その実用class<1.
 
class TT # YD   ...
  class << self
    private
    def private_class_method
      #     ?      !
    end
  end
end
TT.private_class_method# private method `private_class_method' called for TT:Class (NoMethodError)

 
 
2.
 
class TT# YD  ..
  class <<self
    def class_m
      puts "class method"
    end
    alias alias_class_m class_m
  end
end
TT.alias_class_m#class method

最後に、class methodを動的に追加または変更する場合はメタプログラミングを使用し、通常はclass<