我正在尝试创建一些简单的程序,如尝试学习Ruby然后继续使用rails,我正在尝试并习惯于不同类型的代码如何工作变量,循环等流程。
我正在尝试创建一个简单的图书系统我已经在我的哈希中有3本书然后我想在控制台中列出已经存在于库中的书籍然后我希望能够添加新书然后循环并将新列表显示到控制台。
require 'rubygems'
class GetDetailsFromUser
books = {
Eagle_Eye: 1,
Eage_Eye1: 2,
Eagle_Eye2: 3
}
books.each do |i|
puts i
end
while true
add = gets.chomp
break if add.empty?
books << add
end
puts 'New list is below'
books.each do |i|
puts i
end
end
我错了吗?我设法将哈希打印到控制台,但是,我收到一条错误消息
undefined method '<<' for {:Eagle_Eye=>1,...
为什么方法未定义? books << add
?这应该在书籍哈希表中添加一本新书吗?
答案 0 :(得分:2)
用它添加你的第二个号码。这是我为你写的一个工作实例
现场演示 - VISIT THIS LINK
books = {
Eagle_Eye: 1,
Eage_Eye1: 2,
Eagle_Eye2: 3
}
books.each do |i|
puts i
end
while true
puts "What book would you like to add?"
add = gets.chomp
if add.empty? == true
puts "Error - You did not enter a title for a book"
break
else
books.max_by do |book,id|
@list_number = id
end
books[add.to_sym]=@list_number
break
end
end
puts 'New list is below'
books.each do |i|
puts i
end
答案 1 :(得分:0)
Ruby有一个文档站点。 E. g。 Hash
文档明确指出,哈希实例上没有定义方法<<
。
<<
方法在Array
上定义。
为什么你会期望“books << add
应该将新书添加到书籍哈希表”?
你的代码中还有另一个小故障:你在类定义级别执行所有内容,这在这种情况下完全没有意义。
由于目前尚不清楚您希望实现什么目标,我无法提供随时可用的解决方案。
答案 2 :(得分:0)
重构版的@ExecutiveCloser
books = {
Eagle_Eye: 1,
Eage_Eye1: 2,
Eagle_Eye2: 3
}
books.each do |i|
puts i
end
add = ""
while add.empty? do
puts "What book would you like to add?"
add = gets.chomp
books[add.to_sym] = books.size + 1 unless add.empty?
end
puts 'New list is below'
books.each do |i|
puts i
end