1.每个 Ruby 对象都是类指针和实例变量数组的组合。 2.Ruby 类是包含方法定义、属性名称、超类指针和常量表的 Ruby 对象。
今天参加了面试,虽然 out 了,还是做点记录吧。。。给类添加实例方法和类方法的方式有很多种,不知道面试官为什么对已存在的类情有独钟??? 也就是说,类的对象只保存了 self 指针和对象中的实例变量值的数组(或者是散列表:实例变量名为键,实例变量为值);类的实例方法是保存在类中的(底层是 C 语言实现的 RClass)。
答案是类的单例类中。
也就是说,将方法添加到类的单例类中,就等于给类添加了类的方法;把方法添加到类中,就是添加了实例方法。
class Storage
end
module Methods
def abc
puts self
"abc_methods"
end
end
Storage.singleton_class.class_eval do
include Methods
end
Storage.class_eval do
include Methods
end
至于 Ruby 为什么要把类方法单独放在单例类中,这样做有什么好处就不清楚了。难道是因为类中保存的东西太多,把类方法分离出去放在单例类中减少使用的内存吗?