试图检查我的Hash中的内容,但得到 "undefined method `&' for Hash "错误信息。

问题描述 投票:0回答:2

我正在编写一个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

错误。 有没有其他方法可以让我写出这样的内容来减少我使用的行数?

ruby hash ruby-on-rails-5
2个回答
2
投票

是的,这就是你要做的事情。

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)


1
投票

听起来你可能使用的是旧版本的ruby,而Hash可能没有安全导航或挖掘方法,所以你可以尝试一下。

 my_hash_data[:my_key_1] ? my_hash_data[:my_key_1][:my_key_2] : ''
© www.soinside.com 2019 - 2024. All rights reserved.