【问题标题】:ruby pickaxe book says attr_accessor is class method红宝石镐书说 attr_accessor 是类方法
【发布时间】:2012-07-31 00:53:44
【问题描述】:

在红宝石镐的书中,有一句话说

attr_accessor 是类Module中定义的类方法

但是attr_accessor 不是实例方法吗?我在这里遗漏了什么吗?

【问题讨论】:

    标签: ruby class methods instance attr-accessor


    【解决方案1】:

    是的,我能找到的所有文档都同意 attr_accessor 是 Module 的一个实例方法,我相信它必须是一个实例而不是类方法才能完成它的工作。

    我的猜测是这只是一个错字。作者可能只是想指出,attr_accessor 和朋友只是 Module 类的方法,而不是语言本身的一部分,他们不小心说“类”而不是“实例”。

    更新:事实上,我在我的副本(10 周年纪念版)中找不到您的报价,虽然它是印刷版而不是 PDF,所以我无法轻松搜索。我能找到的最接近的是:

    类属性声明不是 Ruby 语法的一部分:它们只是在 Module 类中定义的简单方法,可以自动创建访问器方法。

    很可能你引用的那句话是在比你晚的版本中被删掉的。

    更新 2: 正式错误。在the errata 中列为第 382 页:

    “attr_accessor 是类 Module 中定义的类方法,因此在所有模块和类定义中都可用。”

    应该是私有实例方法——Dave Thomas

    【讨论】:

    • 我明白你在说什么(我知道 attr_accessor 是一种方法),但也许我误解了术语?根据模块ruby-doc.org/core-1.9.3/Module.html#method-i-attr_accessor 的文档,attr_accessor 位于“私有实例方法”部分下。
    • @JeffStorey 哦,是的,我想你是对的。现在想想,这实际上是有道理的。没关系。我现在假设这只是一个错字;他们可能只是想指出它是作为模块类的一部分实现的,并且不小心说“类”而不是“实例”。
    • 好的,谢谢。这个问题我先搁置一会,看看有没有其他解释,但据我所知,它只是Module的一个实例方法
    • 我还有第 10 版印刷品。它在第 379 页(在第 24.5 节 - 元编程类级宏中),该段落的第二句以“回想一下这两个示例......”为主角。
    • 我的另一个想法是,通过类方法,它们意味着它是在类上定义的,而不是类的特定实例(所以它们并不意味着单例方法,因为你可以称之为模块.attr_accessor,但您可以在任何 Module 实例上调用它)
    猜你喜欢
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 2013-03-19
    • 2010-09-08
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多