我很难理解Ruby中的attr\u访问器
有人能给我解释一下吗
假设您有一个classPerson
班级人员
终止
person=person.new
person.name#=>;没有方法错误
显然,我们从未定义过方法名称。让我们这样做吧
班级人员
定义名称
@name#仅返回实例变量@name
终止
终止
person=person.new
person.name#=>;无
person.name=“Dennis”#=>;没有方法错误
啊哈,我们可以读名字,但这并不意味着我们可以指定名字。这是两种不同的方法。前者称为读卡器,后者称为写卡器。我们还没有创造作家,所以让我们这样做吧
班级人员
定义名称
@名字
终止
def名称=(str)
@name=str
终止
终止
person=person.new
person.name='Dennis'
person.name#=>;“丹尼斯”
太棒了。现在我们可以使用reader和writer方法编写和读取实例变量@name。除了,这是如此频繁,为什么每次都要浪费时间写这些方法呢?我们可以做得更容易
班级人员
属性读取器:名称
作者:姓名
终止
即使这样也会重复。当您需要读写器时,只需使用访问器
班级人员
属性存取器:名称
终止
person=person.new
person.name=“丹尼斯”
person.name#=>;“丹尼斯”
同样的道理!猜猜看:person对象中的实例变量@name将被设置为与手动设置时一样,因此您可以在其他方法中使用它
班级人员
属性存取器:名称
def问候语
“你好{@name}”
终止
终止
person=person.new
person.name=“丹尼斯”
person.greeting#=>;“你好,丹尼斯”
就这样。为了了解attr\u reader、attr\u writer和attr\u accessor方法实际上是如何为您生成方法的,请阅读其他答案、书籍和ruby文档