具有字符串键的散列的安全导航运算符
Safe navigation operator for hash with string keys
我有一个问题:
data = { 'str_key' => ['string1', 'string2'] }
# @param [Hash] data - hash with String key
# @return [boolean]
def some_logic_test?(data)
data&.<what_to_do_with_string_key?>.include?('string1')
end
如何将安全导航运算符 &.
用于带字符串键的散列?密钥转换将由 [sic] 强制执行?
这个键是 String
的事实在这里并不重要。你想要的(嗯,我猜)是使用带有 []
方法的安全运算符,你可以这样做:
data&.[]('str_key')&.include?('string1')
你也可以使用Hash#dig
方法,我认为它会提高这段代码的可读性:
data&.dig('str_key')&.include?('string1')
Hash#dig
还具有与嵌套哈希一起正常工作的优势(它实际上是为处理这种情况而设计的):
data = { 'str_key' => { 'str_key1' => { 'str_key2' => 'str_value' } } }
data.dig('str_key', 'str_key1', 'str_key2')
# => 'str_value'
我有一个问题:
data = { 'str_key' => ['string1', 'string2'] }
# @param [Hash] data - hash with String key
# @return [boolean]
def some_logic_test?(data)
data&.<what_to_do_with_string_key?>.include?('string1')
end
如何将安全导航运算符 &.
用于带字符串键的散列?密钥转换将由 [sic] 强制执行?
这个键是 String
的事实在这里并不重要。你想要的(嗯,我猜)是使用带有 []
方法的安全运算符,你可以这样做:
data&.[]('str_key')&.include?('string1')
你也可以使用Hash#dig
方法,我认为它会提高这段代码的可读性:
data&.dig('str_key')&.include?('string1')
Hash#dig
还具有与嵌套哈希一起正常工作的优势(它实际上是为处理这种情况而设计的):
data = { 'str_key' => { 'str_key1' => { 'str_key2' => 'str_value' } } }
data.dig('str_key', 'str_key1', 'str_key2')
# => 'str_value'