ruby - 使用 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)
解决方案
Address.hash
返回对象的整数哈希值(在本例中为 class Address
)。您应该设置@address_List
为空哈希。
@address_List = {}
和
puts @addresses[key]
应该
puts @address_List[@key]
这是 Ruby 中snake_case
用于变量名的约定。所以,address_List
会address_list
。
推荐阅读
- axios - nuxt如何在nuxt构建后手动更改axios baseUrl
- angular - Rxjs 地图运算符在捕获错误时的奇怪行为
- react-native - 如何在 React Native formSheet 模式中创建嵌入式堆栈导航器?
- flutter - Flutter如何在方向横向上设置小部件全屏尺寸?
- authentication - 如何在 RestFul 应用程序中使用 OAuth 2 在前端处理用户权限?
- excel - 组合框(间接列表)
- java - Spring Batch-在固定长度文件中读取页脚
- scala - Slick 批量插入(用于 Redshift JDBC)
- php - PHP 类中子项之间的静态属性共享/定义
- git - 如何保护gitlab上的一些文件?