50100


safe navigation を、例えば足し算オペレータや、 `[]`
オペレータに対して実行したくなりました。これは、どうやったら実現できますでしょうか？

というのも、たとえば `+` であれば、

[code]

    nillable_int + 3
    
[/code]

`[]` であれば、

[code]

    some_obj_not_responding_to_dig[:foo][:bar]
    
[/code]

などを行うときなどに、 safe navigation が使えたらよいな、と思ったので質問しています。


CC BY-SA 4.0
2018-11-08T10:07:27.903
50094
2018-11-08T12:18:44.657
754
question
ruby
safe navigation (`&.`) をオペレータに対して実行したい


`[]` については大抵の場合 `at` を使うことが出来ます。  
そちらを使うのがわかりやすい記述になり、良いかと思います。  
`some_obj_not_responding_to_dig&.at(:foo)&.at(:bar)`

rubyの演算子は、実はただのメソッドです。  
`def +()` などと定義し、演算子としてではなく、普通に呼び出しを行いたい場合  
`lhs.+(rhs)` などの書き方が出来ます。  
ここにsafe navigationを適用するなら、 `lhs&.+(rhs)` となります。

一応 `[]` も同様であるため  
`some_obj_not_responding_to_dig&.[](:foo)&.[](:bar)`  
という書き方も可能です。(`at`を薦めます)


CC BY-SA 4.0
2018-11-08T12:07:52.673
50100
2018-11-08T12:18:44.657
2018-11-08T12:18:44.657
30827
30827
50094
answer