Ruby 有这种方便快捷的方式来共享实例变量,通过使用像这样的键
attr_accessor :var
attr_reader :var
attr_writer :var
如果我可以简单地使用 attr_accessor
,为什么我会选择 attr_reader
或 attr_writer
?是否有类似性能的东西(我怀疑)?我想这是有原因的,否则他们不会制作这样的 key 。
最佳答案
您可以使用不同的访问器将您的意图传达给阅读您代码的人,并使编写无论其公共(public) API 如何调用都能正常工作的类变得更加容易。
class Person
attr_accessor :age
...
end
在这里,我可以看到我既可以读又可以写年龄。
class Person
attr_reader :age
...
end
这里,可以看出我可能只读了年龄。想象一下,它由此类的构造函数设置,之后保持不变。如果年龄有一个修改器(编写器),并且编写类时假设年龄一旦设置就不会更改,那么调用该修改器的代码可能会导致错误。
但是幕后发生了什么?
如果你写:
attr_writer :age
翻译成:
def age=(value)
@age = value
end
如果你写:
attr_reader :age
翻译成:
def age
@age
end
如果你写:
attr_accessor :age
翻译成:
def age=(value)
@age = value
end
def age
@age
end
知道了这一点,这里有另一种思考方式:如果您没有 attr_... 助手,并且必须自己编写访问器,您是否会编写比您的类需要的访问器更多的访问器?比如age只需要读取,你会不会也写一个方法让它可以写入?
关于ruby - 为什么要使用 Ruby 的 attr_accessor、attr_reader 和 attr_writer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5046831/