1

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

4

2 回答 2

2

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

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

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

于 2012-08-31T21:49:19.970 回答
2

你混淆.methods().instance_methods().

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

于 2012-08-31T21:52:26.427 回答