我可以想象当你想要一些属性只能读,或者是可写和可读的时候,但是当你想要一个属性可写且不可读时却不能。
在某些情况下,您可能希望阅读某些属性但无法更改它们。例如,如果您有一个Animal
类,并希望使用名称,年龄和颜色对其进行初始化,则可以编写
attr_accessor :age, :color
然后名称有
attr_reader :name
因为名称不会改变。猫可以变老或改变颜色,但是一旦分配了名称(为了这个问题)不应该改变。
另一方面,我无法合理化您需要attr_writer
(而不是attr_accessor
或attr_reader
)的方案(除了表格密码)。在什么情况下你想写点东西,但不想读它?什么类型的方案或情况需要attr_writer
?
如果您能想到其他编程语言中的场景,那么这是受欢迎的,但我对面向对象知识的直接范围是在Ruby中。
答案 0 :(得分:1)
如果你想要一个琐碎的作家和自定义读者怎么办?如果ivar
尚未设置,则在调用阅读器时想要记住默认值是很常见的。
class Oof
attr_writer :rab
def rab
@rab ||= "rab, of course!"
end
end
oof = Oof.new
oof.rab # => "rab, of course!"
oof.rab = "zab"
oof.rab # => "zab"