Tag: hash

是否可以在Ruby中自动初始化多维哈希数组,就像在PHP中一样?

我习惯于在PHP中使用多维数组,在那里我可以分配和初始化哈希 unset($a); // just to show that there is no variable $a $a[‘settings’][‘system’][‘memory’] = ‘1 Gb’; $a[‘settings’][‘system’][‘disk space’] = ‘100 Gb’; 有没有办法在Ruby中做类似的事情? 或者我需要先初始化所有维度,然后分配值。 是否可以定义一个高级Hash,它可以满足我的需求? 你会怎么做? 更新 除了道格拉斯提出的解决方案(见下文)之外,我还找到了一个主题 ,其中BrianSchröäer提出了Hash类的扩展: class AutoHash self, :update_key => k) end end def []=(k, v) @update[@update_index] = self if @update and @update_index super end end 当仅在请求项目值时,例如a[‘key’] ,当允许不期望地创建丢失的散列项时,它允许解决该问题。 一些额外的参考 ruby hash autovivification(facets) […]

在ruby中访问嵌套哈希的元素

我正在使用ruby编写的一个小工具,它大量使用嵌套的哈希。 目前,我正在检查对嵌套哈希元素的访问,如下所示: structure = { :a => { :b => ‘foo’ }} # I want structure[:a][:b] value = nil if structure.has_key?(:a) && structure[:a].has_key?(:b) then value = structure[:a][:b] end 有一个更好的方法吗? 我想能够说: value = structure[:a][:b] 并且如果:a不是structure的关键等,则nil

如何避免NoMethodError在嵌套哈希中缺少元素,而不重复nil检查?

我正在寻找一种避免在深层嵌套哈希中检查每个级别的nil的好方法。 例如: name = params[:company][:owner][:name] if params[:company] && params[:company][:owner] && params[:company][:owner][:name] 这需要三次检查,并且会产生非常难看的代码。 有办法解决这个问题吗?

Ruby:IF语句中的Nils

我正在使用的rails应用程序中有以下非常难看的ruby代码: if params.present? if params[:search].present? if params[:search][:tags_name_in].present? … end end end 所有我想问的是是否已经定义了params [:search] [:tags_name_in],但因为params,params [:search]和params [:search] [:tags_name_in]可能都是nil,如果我使用… if params[:search][:tags_name_in].present? …如果没有参数或没有搜索参数,我会收到错误。 肯定有一个更好的方法来做到这一点……建议?

在Ruby 1.8中支持Ruby 1.9的哈希语法

我正在使用{key: ‘value’}语法为我的代码中的哈希编写一个Ruby gem。 我的测试全部通过1.9.x,但我(可以理解)在1.8.7中得到syntax error, unexpected ‘:’, expecting ‘)’ 。 是否有支持1.8.x的最佳实践? 我是否需要使用我们的老朋友重写代码=> ,还是有更好的策略?