在Ruby中调用class vs instance上的.methods

时间:2012-08-31 21:43:58

标签: ruby

希望在这里对集体意识进行民意调查,因为我无法通过搜索来找到答案。在Ruby 1.9+中,在实例上调用.methods将产生与该实例的类不同的结果。例如,“foo”.methods将包含“length”和“size”,而String.methods则不包含。这是什么原因?我是资深程序员,但对Ruby很新。根据我的理解,方法应该包括所有祖先方法,所以它是通过mixin还是其他一些模式将长度和大小添加到实例的列表而不是类的?

2 个答案:

答案 0 :(得分:2)

长度和大小是String 实例方法,为什么它们会包含在String(类)方法的列表中?类是对象,并且具有自己的方法。

换句话说,您将获得您正在调用它的对象支持的方法列表。 String是一个类,因此您可以获得其特定的类方法,以及它继承的类方法。

字符串实例是一个实例,因此您可以获得字符串的实例方法以及它继承的实例方法。

答案 1 :(得分:2)

您将.methods().instance_methods()混淆。

第一个将为您提供可以在String对象上调用的方法 - 即String类作为对象本身。第二个将为您提供使用String类或String实例创建的对象的方法。