Help us understand the problem. What is going on with this article?

Ruby2.3のSafe Navigation Operator

More than 3 years have passed since last update.

Ruby2.3の新機能、Safe Navigation Operator
うっかりはまったのでメモ

メソッド呼び出しの.の前に&をつけておくと、レシーバーがnilのときにNoMethodErrorを投げずにnilを返してくれる機能です。

str = nil
str&.upcase  #=>nil

ただしこの機能は&と.をセットで書かないと使えないようで、例えばこういう書き方はできません。

#論理演算子のNilclass#&が呼ばれる
ary = nil
p ary&[0]  #=>false

#Array#&(配列の積集合)
ary = [1, 2, 3]
p ary&[0]  #=>[]

#これならOK
p ary&.[](0)  #=>1
#それならこう書いた方がいい気がする
p ary&.at(0)  #=>1

#ちなみにこういうのはSyntaxError
num = nil
#num& == 0
#num& * 2

考えてみれば、論理演算子やArray#&のようなメソッドと区別するためにこのような仕様なのは当たり前ですね…

takaram
rakus
「IT技術で中小企業を強くします!」というミッションを掲げ、中小企業の業務効率化に貢献する複数のクラウドサービスを提供しているIT企業です。「楽楽精算」「メールディーラー」など、国内トップシェアを誇る複数のサービスを開発し、累計導入社数は5万社を超えています。次の時代の"楽"を創るための、まだ見ぬサービスや機能を生み出す取り組みは、今日も続いています。
https://www.rakus.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away