概要
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 件のコメント:
コメントを投稿