首页 > 解决方案 > 使用 Ruby 类创建哈希

问题描述

我刚刚学习 Ruby 一周,并且不明白我在这段代码中正确地做了什么。

 class Address
  attr_accessor :type, :street, :city, :state
  def initialize (type, street, city, state)
    @type = type
    @street = street
    @city = city
    @state = state
  end
  def show
    puts "Address.show: #{type}"
    puts "#{self.street} \n #{self.city}, #{}self.state}"
  end
end

class Person
  attr_accessor :first, :last, :address_list
  def initialize (first, last)
    @first = first
    @last = last
    @address_list = Address.hash {}
  end

  def show
    puts "From Person.show"
    puts "#{self.first} #{self.last}"

    #puts @addresses.keys
  end

  def address(addr)
    @key = addr.type
    @address_list[@key] = addr    # FAILS HERE 
    puts @address_list.keys
    puts @address_list[@key]
  end
end

# Test
puts "Creating Person"
person=Person.new("Bob","Jones")
person.first="Robert"
person.show

puts "Creating Addresses"
addr1 = Address.new("home", "3103 Hayward St", "Bellingham,","WA")
addr2 = Address.new("work", "123 Main Street", "Hillsdale,","OR")

puts "Adding addresses to person"
person.address(addr1)
person.address(addr2)

puts "Showing Addresses"
addr1.show
addr2.show

puts "Showing Person"
person.show

我已经按照@Arun 的建议进行了更改,但我仍然收到此消息:F:/MyDocs/ruby/Contacts//person.rb:32:in address': undefined method []=' for 1049615506:Integer (NoMethodError)

标签: ruby

解决方案


Address.hash返回对象的整数哈希值(在本例中为 class Address)。您应该设置@address_List为空哈希。

@address_List = {}

puts @addresses[key]

应该

puts @address_List[@key]

这是 Ruby 中snake_case用于变量名的约定。所以,address_Listaddress_list


推荐阅读