希望在这里对集体意识进行民意调查,因为我无法通过搜索来找到答案 . 在Ruby 1.9中,在实例上调用.methods将产生与该实例的类不同的结果 . 例如,“foo”.methods将包含“length”和“size”,而String.methods则不包含 . 这是什么原因?我是资深程序员,但对Ruby很新 . 从我的理解,方法应该包括所有祖先方法,所以它是通过mixin或其他模式,长度和大小被添加到实例的列表但不是类的?
你对 .methods() 和.instance_methods()感到困惑 .
.methods()
第一个将为您提供可以在 String 对象上调用的方法 - 即 String 类作为对象本身 . 第二个将为您提供使用 String 类创建的对象的方法,或 String 的实例 .
String
长度和大小是String实例方法,为什么它们会包含在String(类)方法的列表中?类是对象,有自己的方法 .
换句话说,您将获得您正在调用它的对象支持的方法列表 . String是一个类,因此您可以获得其特定的类方法,以及它继承的类方法 .
字符串实例是一个实例,因此您可以获取字符串的实例方法以及它继承的实例方法 .
2 回答
你对
.methods()
和.instance_methods()感到困惑 .第一个将为您提供可以在
String
对象上调用的方法 - 即String
类作为对象本身 . 第二个将为您提供使用String
类创建的对象的方法,或String
的实例 .长度和大小是String实例方法,为什么它们会包含在String(类)方法的列表中?类是对象,有自己的方法 .
换句话说,您将获得您正在调用它的对象支持的方法列表 . String是一个类,因此您可以获得其特定的类方法,以及它继承的类方法 .
字符串实例是一个实例,因此您可以获取字符串的实例方法以及它继承的实例方法 .