尝试检查我的哈希中的内容但收到 "undefined method `&' for Hash" 错误
Trying to check for content in my Hash but getting "undefined method `&' for Hash" error
我正在 Ruby 关于 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 开始使用 dig
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] : ''
我正在 Ruby 关于 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 开始使用 dig
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] : ''