你什么时候使用attr_writer?

When would you use attr_writer?

我可以想象当你希望某个属性只可读,或者可写和可读时,而不是当你希望一个属性可写而不可读时。

在某些情况下,您可能想要读取某些属性但无法更改它们。例如,如果你有一个 Animal class 并想用名字、年龄和颜色初始化它,你可以写

attr_accessor :age, :color

然后名字有

attr_reader :name

因为名字不会改变。猫可以变老或变色,但名字(为了这个问题)一旦分配不应该改变。

另一方面,我无法合理化您需要 attr_writer(而不是 attr_accessorattr_reader)的场景(除了密码形式)。在什么情况下你会想写一些东西,但不想读它?什么类型的场景或情况需要 attr_writer

如果您能想到其他编程语言的场景,那是欢迎的,但我的面向对象知识的直接范围在 Ruby。

如果你想要一个琐碎的作家和一个习惯reader怎么办?如果尚未设置 ivar,则在调用 reader 时通常希望记住默认值。

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"