【问题标题】:VS Code Prettier breaking hash accessVS Code Prettier 打破哈希访问
【发布时间】:2023-01-20 02:08:56
【问题描述】:

我正在尝试像这样访问哈希中的数据:

result&.data['address']['ISO3166-2-lvl4']

但是当我保存文件时,Prettier 将其更改为:

result&.data&.[]('ISO3166-2-lvl4')

这是行不通的。 Prettier 试图在这里做什么,我该如何阻止它?

【问题讨论】:

    标签: ruby hash prettier


    【解决方案1】:

    如果 resultnil,这实际上不起作用:

    >> 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
    

    【讨论】:

    • 将它留给名为“Prettier”的扩展名,使事情变得更丑陋。虽然实际的安全导航建议(使用dig),但在我看来正确且实用也很糟糕。
    【解决方案2】:

    你可以试试:

    // prettier-ignore
    result&.data['address']['ISO3166-2-lvl4']
    

    【讨论】:

      猜你喜欢
      • 2022-01-27
      • 2014-05-06
      • 2019-11-16
      • 2020-03-28
      • 2023-03-31
      • 1970-01-01
      • 2011-06-29
      • 2021-05-22
      • 2013-06-06
      相关资源
      最近更新 更多