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