我正在编写一个Ruby on rails (5)应用程序。 我试图简化这个块
if my_hash_data[:my_key_1]
my_hash_data[:my_key_1][:my_key_2]
else
""
end
于是我写道
my_hash_data[:my_key_1]&[:my_key_2] || ""
然而,这导致了
undefined method `&' for {:my_key_2=>"Y"}:Hash
错误。 有没有其他方法可以让我写出这样的内容来减少我使用的行数?
是的,这就是你要做的事情。
my_hash_data[:my_key_1]&.[](:my_key_2) || ""
但我建议使用 挖掘 从Ruby 2.3开始
my_hash_data.dig(:my_key_1, :my_key_2) || ""
记住 h[:foo]
是句法糖的 h.[](:foo)
听起来你可能使用的是旧版本的ruby,而Hash可能没有安全导航或挖掘方法,所以你可以尝试一下。
my_hash_data[:my_key_1] ? my_hash_data[:my_key_1][:my_key_2] : ''