Ruby 向数组中添加项的简单程序出现未定义的局部变量错误

Ruby 向数组中添加项的简单程序出现未定义的局部变量错误,ruby,Ruby,结束 这是我的代码,我得到的错误是“未定义的局部变量或方法`book_names'”。我尝试添加“attr\u accessor:book\u names”,但当我这样做时,打印输出就没有意义了 可能只是一个打字错误 class Books attr_accessor :name, :book_id def initialize(name, book_id) @name = name, @book_id = book_id end end

结束


这是我的代码,我得到的错误是“未定义的局部变量或方法`book_names'”。我尝试添加“attr\u accessor:book\u names”,但当我这样做时,打印输出就没有意义了

可能只是一个打字错误

class Books
    attr_accessor :name, :book_id
    def initialize(name, book_id)
        @name = name,
        @book_id = book_id
    end
end

class BookCollection
    def intialize
        @book_names = []
    end

    def add_to_books(book_name)
        book_name.push(book_names)
    end
end

book1 = Books.new("catch22", "12345")
book_collection1 = BookCollection.new
book_collection1.add_to_books(book1.name)
puts book_collection1
应该是

book_name.push(book_names)

使用
attr\u accessor:book\u names

时,代码中有一些错误:

  • 第4行不应以逗号结尾
  • 类BookCollection
    中的
    初始化
    拼写错误,导致
    @book\u names
    未初始化
    @book\u names
    因此,当您尝试使用
    推送
    向其添加元素时,等于
    nil
    nil
    没有方法
    push
    ;因此出现了异常,并打印了带有异常的消息
  • book\u name.push(book\u name)
    应该是
    @book\u name.push(book\u name)
    。(
    @book_name
    必须是实例变量,而不是局部变量,才能在类定义的方法外部可见
  • put book\u collection1
    打印类实例;您要打印
    @book\u name

在这里,我修复了您的代码。我使用了
您的意思是
@book\u name.push(book\u name)
?此外,您需要一种方法(例如,
attr\u reader
)返回@book\u name。如果您的问题得到了回答,请选择一个答案。您忘记在
book\u name
的前面打上一个
@
。我做了所有更改,仍然得到“
添加到\u book”:未定义的方法
推送”.Btw,为什么@Essential?我以前听说你不需要它。@CarySwovelandRight,
图书名称没有
attr\u访问器
book_names.push(book_name)
class Books
  attr_accessor :name, :book_id
  def initialize(name, book_id)
  puts "name = #{name}, book_id = #{book_id}"
    @name = name
    @book_id = book_id
  end
end

class BookCollection
  attr :book_names
  def initialize
    @book_names = []
  end    
  def add_to_books(book_name)
    @book_names << book_name
  end
end

book_collection1 = BookCollection.new
book1 = Books.new("Catch22", "12345")
book2 = Books.new("Hawaii", "67890")
book_collection1.add_to_books(book1.name)
book_collection1.add_to_books(book2.name)

book_collection1.book_names # => ["Catch22", "Hawaii"]