将用户输入添加到哈希?红宝石

时间:2016-04-07 12:07:53

标签: ruby-on-rails ruby hash

我正在尝试创建一些简单的程序,如尝试学习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?这应该在书籍哈希表中添加一本新书吗?

3 个答案:

答案 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

https://repl.it/CDK2/3