gpt4 book ai didi

ruby - Ruby 中的 attr_accessor 是什么?

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

我很难理解 Ruby 中的 attr_accessor
谁能给我解释一下?

最佳答案

假设您有一个类 Person

class Person
end

person = Person.new
person.name # => no method error

显然我们从未定义方法 name。让我们这样做吧。

class Person
def name
@name # simply returning an instance variable @name
end
end

person = Person.new
person.name # => nil
person.name = "Dennis" # => no method error

啊哈,我们可以读取名称,但这并不意味着我们可以分配名称。这是两种不同的方法。前者称为阅读器,后者称为编写器。我们还没有创建编写器,所以让我们开始吧。

class Person
def name
@name
end

def name=(str)
@name = str
end
end

person = Person.new
person.name = 'Dennis'
person.name # => "Dennis"

太棒了。现在我们可以使用 reader 和 writer 方法写入和读取实例变量 @name。除非,这样做如此频繁,为什么每次都浪费时间编写这些方法呢?我们可以做得更容易。

class Person
attr_reader :name
attr_writer :name
end

即使这样也可能会重复。当您希望读者和作者都使用访问器时!

class Person
attr_accessor :name
end

person = Person.new
person.name = "Dennis"
person.name # => "Dennis"

工作方式相同!猜猜是什么:我们的 person 对象中的实例变量 @name 将像我们手动设置时一样设置,因此您可以在其他方法中使用它。

class Person
attr_accessor :name

def greeting
"Hello #{@name}"
end
end

person = Person.new
person.name = "Dennis"
person.greeting # => "Hello Dennis"

就是这样。要了解 attr_readerattr_writerattr_accessor 方法实际上是如何为您生成方法的,请阅读其他答案、书籍、ruby 文档。

关于ruby - Ruby 中的 attr_accessor 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4370960/

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