gpt4 book ai didi

ruby - 为什么要使用 Ruby 的 attr_accessor、attr_reader 和 attr_writer?

转载 作者:数据小太阳 更新时间:2023-10-29 06:16:09 24 4
gpt4 key购买 nike

Ruby 有这种方便快捷的方式来共享实例变量,通过使用像这样的键

attr_accessor :var
attr_reader :var
attr_writer :var

如果我可以简单地使用 attr_accessor,为什么我会选择 attr_readerattr_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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com