【发布时间】:2018-01-17 12:17:01
【问题描述】:
我可以想象,当您希望某个属性只可读,或者可写且可读时,而不是当您希望某个属性可写且不可读时。
在某些情况下,您可能想要读取某些属性但无法更改它们。例如,如果您有一个 Animal 类并希望使用名称、年龄和颜色对其进行初始化,您可以编写
attr_accessor :age, :color
然后对于名字有
attr_reader :name
因为名字不会改变。猫可以变老或改变颜色,但名称(为了这个问题)一旦分配就不应更改。
另一方面,我无法合理化需要attr_writer(而不是attr_accessor 或attr_reader)的场景(除了表单密码)。在什么情况下你会想写点东西,但不想读?什么类型的场景或情况需要attr_writer?
如果您能想到其他编程语言中的场景,那是值得欢迎的,但我的面向对象知识的直接范围是在 Ruby 中。
【问题讨论】:
-
如果我自己提供吸气剂,我会使用
attr_writer。 -
可能有点做作,但对于没有吸气剂的
attr_writer,我可以想象Bulls and Cows 的Ruby 版本。游戏对象允许一名玩家(秘密)通过game.code=设置代码,但不允许对手通过game.code轻松获取。
标签: ruby class object instance attr