2016-11-02 2 views
-1

Ich habe dieses Telefonbuch-Programm, das alle Kontakte nachschlägt, einen Kontakt löscht und einen Kontakt hinzufügt. Ich habe eine globale Hash-Variable namens contactList erstellt. Das Programm erkennt dies jedoch nicht. Was habe ich falsch gemacht?Warum funktioniert mein Hash in Ruby nicht?

class PhoneBook 
    contactList = hash.new 
    def Add(newContact = {}) 
    flag = false 
    if newContact.length < 1 
     return flag 
    else 
     flag = true 
     newContact.collect do |name, number| 
     contactList[name] = number 
     end 
     return flag 
    end 
    end 

    def delete (targetName) 
    if !contactList.has_key?(targetName) 
     return false 
    else 
     contactList.delete(targetName) 
     return true 
    end 

    end 
    def displayContact (targetName) 
    number = -1 
    if contactList.has_key?(targetName) 
     number = contactList(targetName) 
     puts "Contact name : #{targetName}, Contact Number, #{number}" 
    else 
     puts "#{targetName} doesn't exist in the phonebook" 
    end 
    end 
    def displayAllContacts 
    if !contactList.empty? 
     contactList.each {|name, number| puts "Contact name: #{name}, contact number #{number}" } 
    else 
    puts "You don't have any contact details your phonebook" 
    end 
    end 
    end 
+1

Können Sie bitte die Fehlermeldung hinzufügen, die Sie erhalten? IMHO das Problem ist, dass Sie schlechte Syntax für die Erstellung neuer Hash verwenden. Verwenden Sie 'Hash.new' anstelle von' hash.new'. –

+0

Ich glaube, du hattest Recht. Es war eine undefinierte Methode, aber offenbar wurde contactList als lokale Variable deklariert. – Codes316

Antwort

0

Weil Sie Klasse lokale VariablecontactList definiert haben, während Sie ein Instanzvariable haben wollten.

Entfernen Sie diese Zeile

contactList = hash.new 

und fügen Sie die folgende Methode:

def contactList 
    @contactList ||= {} 
end 

P. S. es gibt keine solche Sache wie hash.new, Sie wahrscheinlich Hash.new gemeint.

P.P.S. Bei Ruby-Benennungskonventionen sollten Ihre Variablen/Methoden-Namen in Schlangenform, nicht in Kamelform, angegeben werden. So sollte es contact_list sein.