【问题标题】:Hash/Array of objects in RubyRuby中的对象哈希/数组
【发布时间】:2013-06-08 17:03:52
【问题描述】:

我对 Ruby 很陌生(我来自 C++ 背景),并且我有一个对象数组/哈希,但在尝试访问它们的变量时我没有运气。这是我的尝试:

class Foo
attr_reader :num

def initialize(num)
    @num = num
end
end

foo_list = {}

foo_list["one"] = Foo.new("124")
foo_list["two"] = Foo.new("567")

foo_list.each do |foo|
p "#{foo.num}"              # ERROR: undefined method 'num'
end

我很确定有一种简单的方法可以做我需要的事情,甚至可能不使用“每个”而是其他东西?

【问题讨论】:

  • 提个建议,您可以在块中打印出foo,看看foo 究竟是什么。此外,Ruby 文档非常好。只需在谷歌上搜索“ruby hash”,然后查找each 方法,就会让你走上正轨。 ruby-doc.org/core-2.0/Hash.html#method-i-each
  • 或者,如果您让 Ruby 构建其内置文档,命令行中的ri Hash 将显示各种方法。 ri Hash.each 会提供更多特定于 each 的信息。

标签: ruby arrays object hash


【解决方案1】:

您可能正在寻找这个:

foo_list.each do |key, value|
  puts "#{key}: #{value}"
end

或者您可以扩展您自己的示例(此处的 foo 将是一个包含键和值的数组):

foo_list.each do |foo|
  puts "#{foo[0]}: #{foo[1]}"
end

或者你可以在没有 each 的情况下这样做:

puts "one: #{foo_list["one"]}"
puts "two: #{foo_list["two"]}"

祝您学习 Ruby 愉快! :-)

【讨论】:

    【解决方案2】:

    不应该是foo_list.each do |key, foo|,因为foo_list 是一个哈希?

    【讨论】:

    • 天啊,我觉得自己很愚蠢,我的生命中有一个小时在这上面。谢谢!
    猜你喜欢
    • 2010-11-26
    • 2015-01-06
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多