在检查特定属性之前,请检查哈希值是否为空。

4

我目前正在做的是

"Hello" if options && options[:greet]

我想做的是缩短那行代码。如果options为空,options[:greet]也显然为空。Ruby/Rails是否提供了一种方法来检查哈希表的值?或者有没有更简洁的写法?
我想要做的是缩短这行代码。如果options为nil,则options[:greet]也会为nil。Ruby / Rails是否提供了一种提供此“哈希检查”功能的方法?或者也许有一种更简洁的写法吗?

2
我不同意重复 - 多级嵌套哈希不是这个问题的关键。 - Taryn East
2个回答

7

还有一种快捷方式,我更经常使用它,当我无法控制 options 变量时(即它可能是nil或散列):

options.to_h[:greet] # just convert it to a hash before key access

注意,它仅适用于 从Ruby 2.0开始

6
我认为那行代码是完全没问题的。
也许确保options总是被设置会有意义。如果options作为参数传递给一个方法,你可能想要设置一个默认值:
def method_name(options = {})

如果在使用选项之前options值为nil,您可能希望使用一个空哈希来初始化options

options ||= {}

Ruby on Rails还提供了一个名为try的方法,当你在nil上调用方法时它不会失败。
options.try([], :greet)

谢谢,我一开始是用 options=nil 进行初始化的,没有想到把它设置为空哈希表。使用 try 的方法也很有趣 :) - Dan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接