为什么我的哈希在Ruby中不起作用?

时间:2016-11-02 08:33:37

标签: ruby

我有这个电话簿程序,可以查找所有联系人,删除联系人并添加联系人。我创建了一个名为contactList的哈希全局变量。但是,该计划未能认识到这一点。我做错了什么?

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

答案 0 :(得分:0)

因为您已定义 类本地变量 contactList,而您希望拥有 实例变量

删除此行

contactList = hash.new

并添加以下方法:

def contactList
  @contactList ||= {}
end

P.S。没有hash.new这样的东西,你很可能意味着Hash.new

P.P.S。通过Ruby命名约定,你的变量/方法名称应该是蛇形的,而不是驼峰式的。 所以它应该是contact_list