ruby - << 符号绕过 = 在 ruby​​ 中签名吗?

标签 ruby

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/

相关文章:

ruby - 在不是今天的日期之前创建一个数组?

ruby-on-rails - Savon 可以允许重定向吗? 302 "Error"

ruby-on-rails - OmniAuth:Builder#call 在每个请求上被调用

ruby - 将 unicode 代码点转换为 Ruby 中的字符串字符

ruby-on-rails - 学习 Ruby on Rails。网上商店/在线购物车网络应用程序

ruby-on-rails - 为什么设计不在登录页面上显示身份验证错误?

ruby - Unicorn Rails - 在生产模式下启动时占用 100% CPU

ruby-on-rails - 如何判断类中是否定义了一个方法?

ruby - 使用aws sdk获取带有特定标签的ec2实例

ruby-on-rails - 如何将 Git 子目录推送到 heroku?