【发布时间】:2023-01-20 02:08:56
【问题描述】:
我正在尝试像这样访问哈希中的数据:
result&.data['address']['ISO3166-2-lvl4']
但是当我保存文件时,Prettier 将其更改为:
result&.data&.[]('ISO3166-2-lvl4')
这是行不通的。 Prettier 试图在这里做什么,我该如何阻止它?
【问题讨论】:
我正在尝试像这样访问哈希中的数据:
result&.data['address']['ISO3166-2-lvl4']
但是当我保存文件时,Prettier 将其更改为:
result&.data&.[]('ISO3166-2-lvl4')
这是行不通的。 Prettier 试图在这里做什么,我该如何阻止它?
【问题讨论】:
如果 result 是 nil,这实际上不起作用:
>> result = nil
=> nil
>> result&.data[:address][:iso]
undefined method `[]' for nil:NilClass (NoMethodError)
通常,对于第一个 &. 之后链接的每个方法,您都必须使用 &.。
更漂亮正在尝试使用 & 运算符调用 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"
我认为,&.[] 是一种尴尬的方式,即使更漂亮按预期工作。 dig 方法在这里更可取:
>> result&.data&.dig(:address, :iso)
=> "123"
>> result = nil
=> nil
>> result&.data&.dig(:address, :iso)
=> nil
【讨论】:
dig),但在我看来正确且实用也很糟糕。
你可以试试:
// prettier-ignore
result&.data['address']['ISO3166-2-lvl4']
【讨论】: