我正在try 访问散列数据,如下所示:
result&.data['address']['ISO3166-2-lvl4']
但当我保存文件时,Pretier将其更改为以下内容:
result&.data&.[]('ISO3166-2-lvl4')
这是行不通的.在这里,什么是更漂亮的try ,我如何才能阻止它?
我正在try 访问散列数据,如下所示:
result&.data['address']['ISO3166-2-lvl4']
但当我保存文件时,Pretier将其更改为以下内容:
result&.data&.[]('ISO3166-2-lvl4')
这是行不通的.在这里,什么是更漂亮的try ,我如何才能阻止它?
如果result
等于nil
,这就不起作用了:
>> result = nil
=> nil
>> result&.data[:address][:iso]
undefined method `[]' for nil:NilClass (NoMethodError)
通常,在第一个&.
之后链接的每个方法都必须使用&.
.
Prettier正在try 使用&.
运算符调用Hash#[]
方法,应该如下所示:
>> result&.data&.[](:address)&.[](:iso)
=> nil
# it works when you have result and data hash
class Result
def data = {address: {iso: '123'}}
end
result = Result.new
>> result&.data&.[](:address)&.[](:iso)
=> "123"
我认为,&.[]
是一种笨拙的方式,即使prettier按预期工作.dig
%的方法在这里更可取:
>> result&.data&.dig(:address, :iso)
=> "123"
>> result = nil
=> nil
>> result&.data&.dig(:address, :iso)
=> nil
@engineersmnky
Assuming data hash doesn't actually need safety:
if result
result.data[:address][:iso]
end