确实<&书信电报;sign bypass=登录ruby? 教材 属性访问器:作者 属性读取器:标题 attr_读者:评论 def初始化(作者、标题) @作者 @头衔 @评论=[] 结束 结束 book=book.new(“Chuck Palahniuk”,“搏击俱乐部”) book.comments

确实<&书信电报;sign bypass=登录ruby? 教材 属性访问器:作者 属性读取器:标题 attr_读者:评论 def初始化(作者、标题) @作者 @头衔 @评论=[] 结束 结束 book=book.new(“Chuck Palahniuk”,“搏击俱乐部”) book.comments,ruby,Ruby,带有的语句创建book对象时,仅为book对象创建了实例变量@comments。现在,当您调用writeer方法comments时,它将返回您在实例化书籍时分配给它的数组实例。现在Array有了方法Array#这是一个准确的解释。我想补充一点,您可以避免修改数组的内部状态(即使用@Arup,请详细说明。@CarySwoveland我们没有什么要做的(解冻它)。])()。关于这个主题有一些很好的讨论。但现在,这些链接与我无关。如果您不想冻结数组(您可能不想),您可能应该编写一个getter方法,返

带有
的语句创建
book
对象时,仅为
book
对象创建了实例变量
@comments
。现在,当您调用writeer方法
comments
时,它将返回您在实例化
书籍时分配给它的数组实例。现在
Array
有了方法
Array#这是一个准确的解释。我想补充一点,您可以避免修改数组的内部状态(即使用
@Arup,请详细说明。@CarySwoveland我们没有什么要做的(解冻它)。])()。关于这个主题有一些很好的讨论。但现在,这些链接与我无关。如果您不想冻结数组(您可能不想),您可能应该编写一个getter方法,返回一个
dup
,而不是使用
attr\u reader
class Book
  attr_accessor :author
  attr_reader :title
  attr_reader :comments
  def initialize(author, title)
    @author = author
    @title = title
    @comments = []
  end
end

book = Book.new("Chuck Palahniuk", "Fight Club")


book.comments << "#{book.title} was a good book" 
book.comments.each do |p|
  puts p
end
# Fight Club was a good book
puts book.comments.object_id
book.comments << "#{book.title} was a good book" 
puts book.comments.object_id
book.comments = []
 book.comments << "#{book.title} was a good book"
 # means
 [] << "#{book.title} was a good book"
 # [] has been returned by book.comments