2016-11-24 28 views
2

我有一组嵌套散列。我想字符串“集结号”添加到关联数组值:dennis_ritche] [:语言]将字符串添加到嵌套在散列内部的数组中

def adding_to_dennis 
    programmer_hash = 
     { 
     :grace_hopper => { 
      :known_for => "COBOL", 
      :languages => ["COBOL", "FORTRAN"] 
     }, 
     :alan_kay => { 
      :known_for => "Object Orientation", 
      :languages => ["Smalltalk", "LISP"] 
     }, 
     :dennis_ritchie => { 
      :known_for => "Unix", 
      :languages => ["C"] 
     } 
    } 
     programmer_hash[:dennis_ritchie][:languages] << "Assembly" 
end 

这是错误我得到象征的隐式转换成整数”

+1

此代码按原样运行。我不确定你为什么用一种方法来包装它,但也许这就是问题所在。 – tadman

+0

是的,我认为它应该工作。我必须用一种方法来包装它,才能在学习环境中通过测试。 –

回答

1

我认为你看到的问题是你操纵方法内部的散列,结果是无意中返回了错误的东西。这个方法返回一个Array,因为这是最后一次执行的操作(<< Array返回修改后的Array)

要修复它,请定义一个可以进行操作的方法:

def add_to_hash(hash, programmer = :dennis_ritchie, language = 'Assembly') 
    hash[programmer][:languages] << language 
end 

做的定义是独立的:

programmer_hash = 
    { 
    :grace_hopper => { 
     :known_for => "COBOL", 
     :languages => ["COBOL", "FORTRAN"] 
    }, 
    :alan_kay => { 
     :known_for => "Object Orientation", 
     :languages => ["Smalltalk", "LISP"] 
    }, 
    :margaret_hamilton => { 
     :known_for => "Apollo Program", 
     :languages => ["Assembly"] 
    }, 
    :dennis_ritchie => { 
     :known_for => "Unix", 
     :languages => ["C"] 
    } 
} 

然后调用它来操纵哈希:

add_to_hash(programmer_hash) 

programmer_hash结构随后更新。