【发布时间】:2012-07-31 00:53:44
【问题描述】:
在红宝石镐的书中,有一句话说
attr_accessor 是类Module中定义的类方法
但是attr_accessor 不是实例方法吗?我在这里遗漏了什么吗?
【问题讨论】:
标签: ruby class methods instance attr-accessor
在红宝石镐的书中,有一句话说
attr_accessor 是类Module中定义的类方法
但是attr_accessor 不是实例方法吗?我在这里遗漏了什么吗?
【问题讨论】:
标签: ruby class methods instance attr-accessor
是的,我能找到的所有文档都同意 attr_accessor 是 Module 的一个实例方法,我相信它必须是一个实例而不是类方法才能完成它的工作。
我的猜测是这只是一个错字。作者可能只是想指出,attr_accessor 和朋友只是 Module 类的方法,而不是语言本身的一部分,他们不小心说“类”而不是“实例”。
更新:事实上,我在我的副本(10 周年纪念版)中找不到您的报价,虽然它是印刷版而不是 PDF,所以我无法轻松搜索。我能找到的最接近的是:
类属性声明不是 Ruby 语法的一部分:它们只是在
Module类中定义的简单方法,可以自动创建访问器方法。
很可能你引用的那句话是在比你晚的版本中被删掉的。
更新 2: 正式错误。在the errata 中列为第 382 页:
“attr_accessor 是类 Module 中定义的类方法,因此在所有模块和类定义中都可用。”
应该是私有实例方法——Dave Thomas
【讨论】: