为什么要使用Ruby的attr\u访问器、attr\u阅读器和attr\u编写器?

Ruby有这样一种方便快捷的方式来共享实例变量,方法是使用如下键

属性存取器:var
属性读取器:var
属性编写器:var

如果我可以简单地使用attr\u访问器,为什么我会选择attr\u readerattr\u writer?是否有类似表演的东西(我怀疑)?我想这是有原因的,否则他们就不会做这样的钥匙了

您可以使用不同的访问器将您的意图传达给阅读您的代码的人,并使编写无论如何调用公共API都能正常工作的类变得更容易

班级人员
属性存取器:年龄
...
终止

在这里,我可以看到,我可以读和写的年龄

班级人员
属性读取器:年龄
...
终止

在这里,我可以看到,我可能只阅读年龄。假设它是由这个类的构造函数设置的,然后保持不变。如果age有一个mutator(writer),并且该类是在假定age设置后不会更改的情况下编写的,那么调用该mutator的代码可能会导致错误

但幕后发生了什么

如果你写:

属性编写器:年龄

这可以转化为:

def age=(值)
@年龄=价值
终止

如果你写:

属性读取器:年龄

这可以转化为:

定义年龄
@年龄
终止

如果你写:

属性访问器:年龄

这可以转化为:

def age=(值)
@年龄=价值
终止
定义年龄
@年龄
终止

知道了这一点,这里有另一种思考方式:如果你没有属性。。。助手,并且必须自己编写访问器,您是否会编写比您的类需要的更多的访问器?例如,如果只需要读取age,您是否还会编写一个允许写入age的方法

发表评论