2017-08-29 3 views
0

Warum wird das Programm beendet, nachdem es in der Befehlszeile ausgeführt wurde?Ruby-Programm beendet nach der Ausführung von Code in der Eingabeaufforderung

Ich habe den folgenden Code als .rb-Datei gespeichert. Wenn ich es ausführe, geht es alles durch, aber es zeigt mir nicht den resultierenden Hash, den ich anzeigen möchte. Stattdessen wird das Programm beendet.

def create_list 
    print "What is the list name? " 
    name=gets.chomp 

    hash={"name"=>name,"items"=>Array.new} 
    return hash 
    end 

    def add_list_item 
    print "What is the item called? " 
    item_name=gets.chomp 

    print "How much? " 
    quantity=gets.chomp.to_i 

    hash={"name"=>item_name, "quantity"=>quantity} 
    return hash 
    end 


    def print_separator(character="-") 
    puts character *80 

    end 


    def print_list(list) 
    puts "List: #{list['name']}" 
    print_separator() 

    list["items"].each do |item| 
    puts "\tItem: " + item['name'] + "\t\t\t" + 
    "Quantity: " + item['quantity'].to_s 

    end 
    print_separator() 

    end 

    list=create_list() 
    list['items'].push(add_list_item()) 
    list['items'].push(add_list_item()) 

    puts "Here is your list: \n" 
    print_list(list) 
+0

Wo? Bitte lassen Sie mich wissen, wo es ist und ob das mein Problem verursacht – Amir

+0

Hinzugefügt am Ende und das Programm nicht beendet und ich konnte die Liste sehen: setzt "Drücken Sie RETURN, wenn Sie fertig sind." bekommt – Amir

+2

Diese Einrückung ist reine Anarchie. Wenn Sie Ihren Code besser organisieren und die Dinge richtig eingerückt haben, wären die Fehler viel offensichtlicher. – tadman

Antwort

1

ich einen Blick auf den Code haben, empfehle ich, wann immer Sie Probleme dieser Art stellen den Befehl ruby ​​-wc file_name.rb zu laufen, ist es das, was es ausgedruckt:

list.rb:22: warning: *' after local variable or literal is interpreted as binary operator

list.rb:22: warning: even though it seems like argument prefix

list.rb:24: warning: mismatched indentations at 'end' with 'def' at 21

list.rb:38: warning: mismatched indentations at 'end' with 'def' at 27

Syntax OK

So, nachdem die Vertiefungen das nächste, was Fixierung Sie beheben müssen, ist die Methode print_separator:

def print_separator(character="-") 
    puts character *80 
end 

Ändern Sie es an:

def print_separator() 
    80.times do |n| 
     print "-" 
    end 
    puts 
end 

Auch hier ist ein Arbeitsversion desselben Codes:

def create_list 
    print "What is the list name? " 
    name=gets.chomp 

    hash={"name"=>name,"items"=>Array.new} 
    return hash 
end 

def add_list_item 
    print "What is the item called? " 
    item_name=gets.chomp 

    print "How much? " 
    quantity=gets.chomp.to_i 

    hash={"name"=>item_name, "quantity"=>quantity} 
    return hash 
end 


def print_separator() 
    80.times do |n| 
     print "-" 
    end 
    puts 
end 


def print_list(list) 
    puts "List: #{list['name']}" 
    print_separator() 

    list["items"].each do |item| 
    puts "\tItem: " + item['name'] + "\t\t\t" + 
    "Quantity: " + item['quantity'].to_s 
    end 
    print_separator() 
end 

list=create_list() 
list['items'].push(add_list_item()) 
list['items'].push(add_list_item()) 

puts "Here is your list: \n" 
print_list(list) 

Output:

What is the list name? My list
What is the item called? apple
How much? 2
What is the item called? orange
How much? 2
Here is your list:
List: My list --------------------------------------------------------------------------------
Item: apple Quantity: 2
Item: orange Quantity: 2
--------------------------------------------------------------------------------

Verwandte Themen