在Ruby中对类和实例调用.methods
希望在这里调查集体意识,因为我无法通过搜索找到答案。在Ruby 1.9+中,对实例调用.methods将产生与对该实例的类不同的结果。例如,“foo.”方法将包括“length”和“size”,而String.methods将不包括。这是什么原因?我是一名经验丰富的程序员,但对Ruby还不熟悉。根据我的理解,方法应该包括所有的祖先方法,那么是通过mixin或其他模式将长度和大小添加到实例的列表中,而不是类的列表中吗?长度和大小是字符串实例方法,为什么它们会包括在字符串(类)方法的列表中?类是对象,有自己的方法 换句话说,您将获得所调用对象支持的方法列表。String是一个类,所以您可以得到它的特定类方法,以及它继承的类方法在Ruby中对类和实例调用.methods,ruby,Ruby,希望在这里调查集体意识,因为我无法通过搜索找到答案。在Ruby 1.9+中,对实例调用.methods将产生与对该实例的类不同的结果。例如,“foo.”方法将包括“length”和“size”,而String.methods将不包括。这是什么原因?我是一名经验丰富的程序员,但对Ruby还不熟悉。根据我的理解,方法应该包括所有的祖先方法,那么是通过mixin或其他模式将长度和大小添加到实例的列表中,而不是类的列表中吗?长度和大小是字符串实例方法,为什么它们会包括在字符串(类)方法的列表中?类是对象
字符串实例就是一个实例,所以您可以得到字符串的实例方法,以及它继承的实例方法。长度和大小都是字符串实例方法,为什么它们会包含在字符串(A类)方法列表中?类是对象,有自己的方法 换句话说,您将获得所调用对象支持的方法列表。String是一个类,所以您可以得到它的特定类方法,以及它继承的类方法
字符串实例是一个实例,因此您可以获得字符串的实例方法以及它继承的实例方法。您将
.methods()
与它混淆了
第一个将为您提供可以在
String
对象上调用的方法,即String
类本身作为对象。第二个将为您提供使用String
类创建的对象的方法,或者您将方法()
与混淆的字符串的实例
第一个将为您提供可以在String
对象上调用的方法,即String
类本身作为对象。第二个将为您提供使用String
类创建的对象的方法,或者String
的实例,将一个类视为类的常量对象(不确定这在Ruby中是否是真的,但这个想法无论如何都有效)。那么它应该是有意义的。把一个类看作这个类的一个常量对象(不确定这在Ruby中是不是真的,但是这个想法无论如何都是有效的)。那么它应该是有意义的。