1

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

attr_accessor 是类 Module 中定义的类方法

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

4

1 回答 1

4

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

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

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

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

您引用的那句话很可能是在比您晚的版本中编辑的。

更新 2:这正式是一个错字。在勘误表中列为第 382 页:

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

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

于 2012-07-31T00:57:57.580 回答