在红宝石镐的书中,有一句话说
attr_accessor 是类 Module 中定义的类方法
但不是attr_accessor
实例方法吗?我在这里错过了什么吗?
在红宝石镐的书中,有一句话说
attr_accessor 是类 Module 中定义的类方法
但不是attr_accessor
实例方法吗?我在这里错过了什么吗?
是的,我能找到的所有文档都同意这attr_accessor
是 Module 的实例方法,我相信它必须是实例而不是类方法才能完成它的工作。
我的猜测是这只是一个错字。作者可能只是试图指出,而不是作为语言本身的一部分,attr_accessor
朋友只是 Module 类的方法,他们不小心说“类”而不是“实例”。
更新:事实上,我在我的副本(10 周年纪念版)中找不到您的报价,虽然它是印刷版而不是 PDF,所以我无法轻松搜索它。我能找到的最接近的是:
类属性声明不是 Ruby 语法的一部分:它们只是在类
Module
中定义的自动创建访问器方法的方法。
您引用的那句话很可能是在比您晚的版本中编辑的。
更新 2:这正式是一个错字。在勘误表中列为第 382 页:
“attr_accessor 是类 Module 中定义的类方法,因此在所有模块和类定义中都可用。”</p>
应该是私有实例方法——Dave Thomas