実は回字には7つの書き方があります...
rubyで定義されたクラスメソッドの違いを説明します.
区别:个人の感じはメタプログラミングの方式で定义するもっと动态のいくつかの柔软(女の子の、くだらない话!动态の不柔软はメタプログラミングですか)
また、第2の(class<例えばクラスメソッドはpublicだと言う人もいれば、クラスメソッドは別名では使えないと言う人もいます...
その実用class<1.
2.
最後に、class methodを動的に追加または変更する場合はメタプログラミングを使用し、通常はclass<
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<
その実用class<
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<