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

All*_*ang 8 ruby hash

我有一段这样的代码:

my_hash = {}
first_key = 1
second_key = 2
third_key = 3
my_hash[first_key][second_key][third_key] = 100
Run Code Online (Sandbox Code Playgroud)

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

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

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

Rus*_*ell 10

默认情况下,哈希不会嵌套.由于my_hash[first_key]没有任何设定,它是nil.并且nil不是哈希,因此尝试访问其中一个元素失败.

所以:

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
Run Code Online (Sandbox Code Playgroud)

  • @AllanJiang Ruby中没有"静态"这样的东西. (5认同)

tex*_*uce 7

您使用散列的方式在Ruby中无效,因为在进入嵌套散列之前必须先将每个值分配给散列(我想您是来自PHP?),但您可以使用vivified散列:

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}}}
Run Code Online (Sandbox Code Playgroud)

这是你可能会习惯的方式.