安全导航操作符(孤独操作符)不适用于哈希

eik*_*iko 3 ruby

我正在尝试使用安全导航运算符&来选择调用[]变量上的方法,该变量可能是散列或nil. 据我所知,这就是安全导航操作员的用途。

my_hash = nil
puts "hello, #{ my_hash&[:test] }"
my_hash = { test: "world" }
puts "hello, #{ my_hash&[:test] }"
Run Code Online (Sandbox Code Playgroud)

我期望输出:

hello, false
hello, world
Run Code Online (Sandbox Code Playgroud)

但它不适用于哈希;相反,我得到:

hello, false
undefined method `&` for `{:test=>"world"}:Hash` (NoMethodError)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Urs*_*sus 8

因为这

my_hash[:test]
Run Code Online (Sandbox Code Playgroud)

是这个的语法糖

my_hash.[](:test)
Run Code Online (Sandbox Code Playgroud)

所以这应该有效

my_hash&.[](:test) 
Run Code Online (Sandbox Code Playgroud)

但我知道这并不漂亮。

  • 当我说“哈希”时,我指的是一个变量,而不是哈希对象。不管怎样,这个 `nil&.[](:test)` 的计算结果是 `nil`,没有 `NoMethodError` (3认同)