我正在尝试使用安全导航运算符&来选择调用[]变量上的方法,该变量可能是散列或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)
我究竟做错了什么?
因为这
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)
但我知道这并不漂亮。