在Rails中,如果hash.try(:[], :key)
可能hash
,您可以执行nil
。
是否有使用新的Ruby 2.3安全导航操作符&.
和[]
的等效版本?
答案 0 :(得分:48)
public static void main(String arg[])
{
HashMap<integer, ArrayList<String>> map = new HashMap<integer, ArrayList<String>>();
ArrayList<String> namelist = new ArrayList<String>();
obj.add("john");
obj.add("kel");
obj.add("abraham");
obj.add("sonny");
obj.add("aron");
map.put(3, namelist);
for (int i = 0; i < namelist.size(); i++) {
String element = namelist[i];
String nextElement = elements[i+1];
}
}
不等同于Rails&#39; &.
,但您可以使用try
进行哈希。只是使用它,没什么特别的。
&.
虽然我不这样做。
答案 1 :(得分:37)
我通常会把这样的东西放进我的初学者中:
Class Hash
def deep_fetch *args
x = self
args.each do |arg|
x = x[arg]
return nil if x.nil?
end
x
end
end
然后
response.deep_fetch 'PaReqCreationResponse', 'ThreeDSecureVERes', 'Message', 'VERes', 'CH', 'enrolled'
在一个古怪的案件中。
社区中的普遍共识似乎是避免尝试和孤独的算子&.
现在有Hash#dig
方法可以做到这一点:
重复检索与每个关键对象相对应的值对象。
h = { foo: {bar: {baz: 1}}}
h.dig(:foo, :bar, :baz) #=> 1
h.dig(:foo, :zot) #=> nil
http://ruby-doc.org/core-2.3.0_preview1/Hash.html#method-i-dig
答案 2 :(得分:5)
虽然hash&.[](:key)
对于受过训练的rubyist来说是优雅的,但我只是使用hash && hash[:key]
,因为它更好,更直观地为追随我的程序员读取,他可能不熟悉复杂的红宝石。代码库中的一些额外字符有时可以为其他人保存大量的Google搜索。
(当然,考虑到你想要使用它的上下文是在条件语句中。)
答案 3 :(得分:4)
当std::cout<<std::numeric_limits<float>::max()<<std::endl;
std::cout<<std::numeric_limits<float>::epsilon()<<std::endl;
为零时,接受的答案将不会考虑...
您可以在hash
之前使用安全导航操作符重写您所拥有的内容
.try
但您也可以使用:
http://ruby-doc.org/core-2.3.0_preview1/Hash.html#method-i-dig
你可以通过哈希来做到这一点......
hash&.try(:[], :key)
如果没有任何密钥提取,则返回nil。
hash&.dig(:key1, :key2 ...)
会返回'info'
{ key1: { key2: 'info' } }
会返回{ key1: { wrong_key: 'info' } }
答案 4 :(得分:0)
使用安全导航运算符比使用&.[](:slug)
更为清晰易懂的方法是使用fetch
方法:
&.fetch(:slug)
如果可能未定义密钥,则可以将第二个参数用作默认值:
&.fetch(:slug, nil)