首页 文章

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

提问于
浏览
1

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

2 回答

  • 2

    你对 .methods().instance_methods()感到困惑 .

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

  • 2

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

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

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

相关问题