Ruby哈希错误:未定义的方法[]

时间:2012-05-01 01:42:08

标签: ruby hash

我有一段这样的代码:

my_hash = {}
first_key = 1
second_key = 2
third_key = 3
my_hash[first_key][second_key][third_key] = 100

并且红宝石翻译给了我一个错误说:

  

未定义的方法`[]'为nil:NilClass(NoMethodError)

这是否意味着我不能像那样使用哈希?或者你认为这个错误可能是因为别的东西?

4 个答案:

答案 0 :(得分:10)

默认情况下,嵌套不会嵌套。由于my_hash[first_key]未设置为任何内容,因此nilnil。并且my_hash = {} first_key = 1 second_key = 2 third_key = 3 my_hash[first_key] # nil my_hash[first_key][second_key] # undefined method `[]' for nil:NilClass (NoMethodError) my_hash[first_key] = {} my_hash[first_key][second_key] # nil my_hash[first_key][second_key] = {} my_hash[first_key][second_key][third_key] = 100 my_hash[first_key][second_key][third_key] # 100 不是哈希,因此尝试访问其中一个元素失败。

所以:

{{1}}

答案 1 :(得分:7)

你使用hash的方式在Ruby中是无效的,因为在进入嵌套哈希之前必须先将每个值分配给一个哈希(我想你是来自PHP?),但你可以使用vivified hash:< / p>

my_hash = Hash.new{|h,k| h[k]=Hash.new(&h.default_proc)}
first_key = 1
second_key = 2
third_key = 3
my_hash[first_key][second_key][third_key] = 100
p my_hash

#output: {1=>{2=>{3=>100}}}

这是你可能习惯的方式。

答案 2 :(得分:2)

你不能使用这样的哈希; my_hash[first_key]只是nil,然后下一个索引操作失败。可以使哈希对象以您正在寻找的方式运行 - 请参阅http://t-a-w.blogspot.co.uk/2006/07/autovivification-in-ruby.html - 但目前尚不清楚这是不错的风格。

答案 3 :(得分:0)

您可以执行类似

的操作
class NilClass

  def [] key
    nil
  end

end

nil_overrides.rb等初始值设定项中,您可以使用nil['xxx']