类是类的 singleton_class 类(eigenclass 类)的实例对象 先有蛋还是先有鸡? 类、类、类....,有点累吧,^_^
一、向类添加的实例方法,(添加类的 singleton_method)
class MyClass
end
a = MyClass.new
#方法1(动态)
MyClass.class_eval %{
def hi
p "hi,world"
end
}
#方法2(动态)
MyClass.send(:define_method, :hi2){p 'hi, world'}
#调用
a.hi
a.hi2
#=>"hi,world"
#检查
a.methods.grep /^hi+/
MyClass.instance_methods (false)
二、添加类方法,(添加类的 singleton_method)
class MyClass
end
#方法1,使用class_eval(动态)
MyClass.class_eval %{
def self.hi
p "hi,world"
end
}
#方法2,使用send(动态)
MyClass.singleton_class.send(:define_method, :hi2){p 'hi, world'}
#方法3, 打开MyClass.singleton_class (eigenclass)
class <<MyClass
def hi3
p "hi,world"
end
end
MyClass.hi
MyClass.hi2
MyClass.hi3
MyClass.methods(false)
MyClass.singleton_methods(false)
MyClass.singleton_class.instance_methods(false)
三、向 engenclass 类方法,(可以继承,很少用!)
class <<MyClass #很少用
def self.hello
p "i'm in 'MyClass.singleton_classs.methods'"
end
end
MyClass.singleton_class.hello
MyClass.singleton_class.methods(false)