2022年3月28日月曜日

Ruby のアンパサンド (Proc Symbol) を使う

Ruby のアンパサンド (Proc Symbol) を使う

概要

Ruby のアンパサンドにはいろいろな使い方があります

例えばループなどの処理でブロックを取る場合にブロック引数の代わりにアンパサンドを使って Proc を取ることができます
状況によってはある程度記述を省略することができるテクニックです

環境

  • macOS 11.6.5
  • Ruby 3.0.3p157

演算子としてのアンパサンド

[1, 2] & [1, 2, 3]
=> [1, 2]

ブロック展開

proc = Proc.new {|i| p i}
10.times(&proc)

Proc オブジェクトを受け取る

各要素文字列にする

10.times.map(&:to_s)

これは以下と同じ

10.times.map {|i| i.to_s}
=> ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]

要素を表示する

10.times(&method(:p))

これは以下と同じ

10.times{|i| p i}

結果

0
1
2
3
4
5
6
7
8
9
=> 10

コロンのあるなしは

  • コロンがあるのは to_proc 可能な場合 (プライベートメソッドを呼び出す場合)
  • コロンがないのは to_proc できない場合 (他のクラスのメソッドを呼び出す場合)

おまけ: ぼっち演算子

["a","b",nil].each {|i| i.upcase}

これはエラーになるが以下はエラーにならない

["a","b",nil].each {|i| i&.upcase}

参考サイト

0 件のコメント:

コメントを投稿