我正在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

Ruby相关问答推荐

如何在将拆分元素保留为空字符串的同时拆分字符串?

VS Code Prettier 打破哈希访问

.nil?、.blank? 之间的区别?和.empty?

我可以在 Ruby 的 heredoc 中访问变量吗?

Ruby 中的 Monad 类似功能

如何使用 capybara + cucumber 断言 ruby​​ 中的 html 表行数

复制文件,在 Ruby 中根据需要创建目录

在单个 node 上使用 XPath 返回所有 node 中的元素

从Electron邮件中删除签名和回复

在本地文件夹中安装 gem

class_eval、class_exec、module_eval 和 module_exec 有什么区别?

group_by 在 rails by 2 或更多属性

ruby datetime 中有 add_days 吗?

如何设置方法测试中使用的私有实例变量?

带有可选参数的方法

如何获取当前 rake 任务的 PID?

rbenv、rvm 和 chruby 有什么区别?

Ruby - 无法修改冻结的字符串 (TypeError)

使用 Liquid 标记在 Jekyll 中获取今天的日期

Ruby:使用 ENV 变量(如果存在)的最简洁方法,否则使用默认值