2016-04-07 6 views
0

Ich versuche, einige einfache Programme zu erstellen, wie Ruby zu versuchen und dann auf Schienen zu gehen, ich spiele nur um zu versuchen und zu gewöhnen, wie verschiedene Arten von Code arbeiten Variablen, Loops usw.Benutzereingabe zu einem Hash hinzufügen? Ruby

ich versuche, ein einfaches Buch-System zu schaffen, waren ich habe bereits drei Bücher in meinem Hash und dann mag ich die Bücher zur Liste bereits in der Bibliothek in der Konsole und dann mag ich in der Lage sein, neue Bücher hinzufügen und dann auch Schleife durch und zeigen Sie die neue Liste auf der Konsole an.

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 

Ich liege falsch? Ich schaffe es aus dem Hash an die Konsole zu drucken, aber ich erhalte eine Fehlermeldung

undefined method '<<' for {:Eagle_Eye=>1,...

Warum ist die Methode nicht definiert? books << add? Dies sollte ein neues Buch zur Buch-Hash-Tabelle hinzufügen?

Antwort

0

Refactoring Version von @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

0

Ruby hat eine Dokumentationsseite. Z.B. Hash Dokumentation klar, dass es keine Methode << auf der Hash-Instanz definiert ist.

<< Methode basiert auf Array definiert.

Warum würden Sie erwarten „books << add sollte ein neues Buch zum Buch Hash-Tabelle hinzufügen“?

Es gibt eine weitere Panne im Code: Sie alles auf Klassendefinition Ebene auszuführen, die in diesem Fall absolut keinen Sinn macht.

Da unklar ist, was Sie erreichen wollen, ich bin nicht in der Lage eines ready-to-go-mit bereitzustellen Lösung.

2

Ihre zweite Zahl mit ihm hinzufügen. Hier ist ein funktionierendes Beispiel schrieb ich für Sie

Live Demo - 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][email protected]_number 
     break 
     end 
     end 

    puts 'New list is below' 

    books.each do |i| 
    puts i 
    end 
Verwandte Themen