确实<&书信电报;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