JRuby9+Rails5.2环境下account["details"]["name"]的Ruby安全导航写法
正确的安全导航实现方式
你之前写的account&["details"]&["name"]不符合Ruby语法规则,安全导航操作符&.必须后接方法名,而[]是Hash的内置实例方法,不能直接和&拼接使用,因此会抛出未知方法错误。
以下是两种适配你环境的合法写法:
方案1:纯Ruby语法兼容写法
将[]作为方法通过安全导航符显式调用:
account&.[]("details")&.[]("name")
该写法不依赖任何框架扩展,符合Ruby原生语法规范。
方案2:更简洁的推荐写法(适配Rails 5.2/JRuby9环境)
你所用的环境已经支持Hash#dig方法,该方法本身就具备安全遍历嵌套Hash的能力,遇到空值会直接返回nil不会抛出异常,可读性更高:
- 如果能确认
account本身不会为nil,直接写:
account.dig("details", "name")
- 如果
account也可能为nil,结合安全导航符使用:
account&.dig("details", "name")
内容的提问来源于stack exchange,提问作者Pawan Patel
相关产品推荐
相关产品推荐

