2019-03-07

RubyのProcは `#call` 以外でも実行できる

Procオブジェクトは #call を使って実行することが多いと思う。

fn = Proc.new { |v| puts v }
fn.call("Hello, world!")
# => "Hello, world!"

しかし、次のように [] を使っても実行できるのだ。

fn = Proc.new { |v| puts v }
fn["Hello, world!"]
# => "Hello, world!"

引数が複数でも実行できる。

fn = Proc.new { |v, v2| puts "#{v}, #{v2}" }

fn.call("Hello", "world!")
# => "Hello, world!"

fn["Hello", "world!"]
# => "Hello, world!"

ドキュメントにも普通に書いてあるよ(僕は今日知りました)。
https://docs.ruby-lang.org/ja/latest/method/Proc/i/=3d=3d=3d.html