你什么时候使用attr_writer?
When would you use attr_writer?
我可以想象当你希望某个属性只可读,或者可写和可读时,而不是当你希望一个属性可写而不可读时。
在某些情况下,您可能想要读取某些属性但无法更改它们。例如,如果你有一个 Animal
class 并想用名字、年龄和颜色初始化它,你可以写
attr_accessor :age, :color
然后名字有
attr_reader :name
因为名字不会改变。猫可以变老或变色,但名字(为了这个问题)一旦分配不应该改变。
另一方面,我无法合理化您需要 attr_writer
(而不是 attr_accessor
或 attr_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"
我可以想象当你希望某个属性只可读,或者可写和可读时,而不是当你希望一个属性可写而不可读时。
在某些情况下,您可能想要读取某些属性但无法更改它们。例如,如果你有一个 Animal
class 并想用名字、年龄和颜色初始化它,你可以写
attr_accessor :age, :color
然后名字有
attr_reader :name
因为名字不会改变。猫可以变老或变色,但名字(为了这个问题)一旦分配不应该改变。
另一方面,我无法合理化您需要 attr_writer
(而不是 attr_accessor
或 attr_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"