2016-11-02 6 views
-1

私はすべての連絡先を検索し、連絡先を削除し、連絡先を追加するこの電話帳プログラムを持っています。 contactListという名前のハッシュグローバル変数を作成しました。しかし、プログラムはこれを認識できません。私は何を間違えたのですか?私のハッシュがRubyで動作しないのはなぜですか?

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

入手しているエラーメッセージを追加できますか? IMHO問題は、新しいハッシュを作成するために不正な構文を使用していることです。 'hash.new'の代わりに' Hash.new'を使用してください。 –

+0

私はあなたが正しいと信じています。これは未定義のメソッドですが、contactListがローカル変数として宣言されているようです。 – Codes316

答えて

0

あなたはインスタンス変数を持っていると思ったのに対し、あなたは、contactListクラスのローカル変数を定義しているので。

contactList = hash.new 

この行を削除し、次のメソッドを追加します

def contactList 
    @contactList ||= {} 
end 

P.S.をhash.newのようなものはありません。おそらくHash.newを意味します。

P.P.S. Rubyの命名規則では、変数/メソッドの名前は、ラクダのケースではなく、ヘビケースにする必要があります。 だからそれはcontact_listであるはずです。

関連する問題