【问题标题】:When would you use attr_writer?你什么时候使用 attr_writer?
【发布时间】:2018-01-17 12:17:01
【问题描述】:

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

在某些情况下,您可能想要读取某些属性但无法更改它们。例如,如果您有一个 Animal 类并希望使用名称、年龄和颜色对其进行初始化,您可以编写

attr_accessor :age, :color

然后对于名字有

attr_reader :name

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

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

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

【问题讨论】:

  • 如果我自己提供吸气剂,我会使用attr_writer
  • 可能有点做作,但对于没有吸气剂的attr_writer,我可以想象Bulls and Cows 的Ruby 版本。游戏对象允许一名玩家(秘密)通过game.code=设置代码,但不允许对手通过game.code轻松获取。

标签: ruby class object instance attr


【解决方案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"

【讨论】:

  • 正是如此。
  • 谢谢大家!我和我的一位导师谈过这个问题,他提出了关于密码的观点,用户可以在其中编写密码,但程序员看不到它,但我一定会和他一起举出这个例子!
  • @M.C.省略 getter 只会使检索实例变量的值变得不那么方便,但它仍然(很容易)可能。
猜你喜欢
  • 2010-09-19
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-13
  • 2010-09-23
  • 2012-04-04
相关资源
最近更新 更多