相关疑难解决方法(0)

等价的.try()用于散列以避免在nil上出现"未定义的方法"错误?

在Rails中,如果不存在值以避免错误,我们可以执行以下操作:

@myvar = @comment.try(:body)
Run Code Online (Sandbox Code Playgroud)

当我深入挖掘哈希并且不想得到错误时,等价物是什么?

@myvar = session[:comments][@comment.id]["temp_value"] 
# [:comments] may or may not exist here
Run Code Online (Sandbox Code Playgroud)

在上述情况下,session[:comments]try[@comment.id]不起作用.什么会?

ruby hash ruby-on-rails ruby-on-rails-3

164
推荐指数
9
解决办法
7万
查看次数

Ruby Style:如何检查嵌套的哈希元素是否存在

考虑存储在哈希中的"人".两个例子是:

fred = {:person => {:name => "Fred", :spouse => "Wilma", :children => {:child => {:name => "Pebbles"}}}}
slate = {:person => {:name => "Mr. Slate", :spouse => "Mrs. Slate"}} 
Run Code Online (Sandbox Code Playgroud)

如果"人"没有任何子女,则"儿童"元素不存在.所以,对于Slate先生,我们可以检查他是否有父母:

slate_has_children = !slate[:person][:children].nil?
Run Code Online (Sandbox Code Playgroud)

那么,如果我们不知道"slate"是一个"人"哈希呢?考虑:

dino = {:pet => {:name => "Dino"}}
Run Code Online (Sandbox Code Playgroud)

我们不能再轻易检查孩子了:

dino_has_children = !dino[:person][:children].nil?
NoMethodError: undefined method `[]' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

那么,你如何检查哈希的结构,特别是如果它被深深嵌套(甚至比这里提供的例子更深)?也许更好的问题是:这样做的"红宝石方式"是什么?

ruby hash coding-style

56
推荐指数
3
解决办法
4万
查看次数

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

有一个更好的方法吗?我想能够说:

value = structure[:a][:b]
Run Code Online (Sandbox Code Playgroud)

而得到nil,如果:一个是不是一个关键structure,等等.

ruby hash hash-of-hashes

31
推荐指数
5
解决办法
7万
查看次数

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

我正在寻找一种避免nil在深层嵌套哈希中检查每个级别的好方法.例如:

name = params[:company][:owner][:name] if params[:company] && params[:company][:owner] && params[:company][:owner][:name]
Run Code Online (Sandbox Code Playgroud)

这需要三次检查,并且会产生非常难看的代码.有办法解决这个问题吗?

ruby hash ruby-on-rails hash-of-hashes

28
推荐指数
3
解决办法
3547
查看次数

如何访问数组数组深处的元素而不出现“未定义方法”错误

当尝试访问数组数组深处的元素时,如果元素不存在,避免出现错误“undefined method `[]” for nil:NilClass”的最佳方法是什么?

例如,我目前正在这样做,但对我来说似乎很糟糕:

if @foursquare['response']['groups'][0].present? && @foursquare['response']['groups'][0]['items'].present?
Run Code Online (Sandbox Code Playgroud)

ruby hash hash-of-hashes

4
推荐指数
1
解决办法
2247
查看次数