&:メソッド名
とは
注
Rubyのシンボルには任意の文字列を使えます(引用符を使えば:"記号含み&*(の文字列"
も使えます)が、本記事では簡単のため&
との組み合わせでは:メソッド名
と限定して表記します。
Rubyの&:メソッド名
という記法についてググって調べようとするとなかなか大変だったのでメモします。というのも、この記法そのものには定まった名称がないからです。
&
- 手続きオブジェクト(
Proc
オブジェクト)をブロックに変換するショートハンド
「Proc coercion」演算子と呼ばれることも :メソッド名
- Rubyのシンボル
参考: メソッド呼び出し(super・ブロック付き・yield) (Ruby 2.6.0)
ブロックの部分だけを先に定義して変数に保存しておき、後からブロック付きメソッドに渡すことも出来ます。それを実現するのが手続きオブジェクト(Proc)です。それをブロックとして渡すにはブロック付きメソッドの最後の引数として
&
で修飾した手続きオブジェクトを渡します。
docs.ruby-lang.orgより
&:メソッド名
は上記の通り2つの記法の合わせ技なので、定まった名称がない理由も理解できました。
見た目にはあたかも&:
とメソッド名
のようではありますが、実は&
と:メソッド名
の組み合わせなので、一度わかってしまえばいいのですが少々紛らわしいです。
とはいうものの、ぼっち演算子のような「いい名前」が&:メソッド名
にもあればと思います。誰か付けませんか?
&
によるProc coercion
以下の記事によると、&
によるProc変換は「Proc coercion」(coercion: 強制、強要など)と呼ばれているとのことです。ググった限りでは用語にまではなっていないような雰囲気ですが。
&
によるProc coercionはRubyの最初期からある機能なので、後から導入されたぼっち演算子&.
とは異なり、Rubyでは昔から使える記法ということになります。
参考
おたより発掘
Ruby: アンパサンドとコロン`&:`記法について調べてみた .https://t.co/b43G5XUiYI
「&:メソッド名」のことはRuboCopのCop名にならってSymbolProcと呼んでる。
— ゆうじ (@yuji_developer) July 20, 2019
参考: Class: RuboCop::Cop::Style::SymbolProc
— Documentation for rubocop (1.15.0)
更新情報