ruby - VS Code Prettier 破坏哈希访问

标签 ruby hash prettier

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

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

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

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

这不起作用。 Prettier 在这里想做什么?我该如何阻止它?

最佳答案

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

>> result = nil
=> nil
>> result&.data[:address][:iso]
undefined method `[]' for nil:NilClass (NoMethodError)

一般来说,对于在第一个 &. 之后链接的每个方法,您都必须使用 &.

Prettier 正在尝试调用 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

@engineersmnky
假设数据哈希实际上不需要安全性:

if result
  result.data[:address][:iso]
end

关于ruby - VS Code Prettier 破坏哈希访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75175936/

相关文章:

ruby-on-rails - 如何修复 Rails 应用程序中与第三方 gem 的 namespace 冲突

security - 在 cookie 中存储(散列)密码是否安全?

javascript - VS Code 自动格式化更漂亮

javascript - 对象中最后一行后的尾随逗号

ruby - 为什么 local_variables 会返回尚未分配的局部变量?

ruby-on-rails - 有没有人能够让 attachment_fu 与 rails 3 一起工作?

ruby-on-rails - Rails ActiveModel::Serializer 嵌套响应在 "data":父级

java - java中的散列json

javascript - 用于对数据进行排序的多个 (2) 哈希 URL 参数

visual-studio-code - VSCode 设置,EsLint 和 Prettier 冲突