MogLog

日記 兼 備忘録

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!"

ドキュメントにも普通に書いてあるよ(僕は今日知りました)。
instance method Proc#=== (Ruby 2.6.0)