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
如果注释方法只是一个 attr_reader 而不是 attr_writer,为什么 << 附加起作用?是因为它绕过了 attr_writer 的 = 符号吗?
最佳答案
带有 <<
的声明修改 book.comments
的数组引用,它不会改变book.comments
本身。
打印其 object_id
之前和之后:
puts book.comments.object_id
book.comments << "#{book.title} was a good book"
puts book.comments.object_id
您会看到它是同一个对象。
与非法语句比较:
book.comments = []
关于ruby - << 符号绕过 = 在 ruby 中签名吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26954478/