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"]