lambdaはcall以外にも[]で呼び出す事ができます
printout = ->(x) { ("*" * 10) << x.to_s << ("*" * 10)} #=> #<Proc:0x007fb58d03ef18@(irb):34 (lambda)> printout['a'] #=> "a"
これはprocも同様です
p = proc {|x| puts x} #=> #<Proc:0x007fb58c86c538@(irb):47> p['a'] #=> a
ためしにリファレンスを読んでみると...
instance method Method#
self[*args] -> object[permalink][rdoc]
call(*args) -> object
call(*args) { ... } -> object
メソッドオブジェクトに封入されているメソッドを起動します。
引数やブロックはそのままメソッドに渡されます。
self の形の呼び出しは通常のメソッド呼び出しに見た目を 近付けるためだけに用意されたもので、Array#のような 他の メソッドとの意味的な関連性はありません。
(以下略)
ちゃんと載ってます。
ぱっとみ配列っぽくなってしまいますが、手早く書く事ができそうです