Kernel.#proc でブロックを渡さなかった時の挙動

さて、 Kernel.#proc といえば普通は『ブロックをオブジェクトとして扱う時』に使用します。

# ブロックをオブジェクト化する
plus = proc { |a, b| a + b }
# もしくは Proc.new でもどうようの挙動になる
# plus = proc { |a, b| a + b }

# #call でブロックを評価する
p plus.call 1, 2

細かい点は違いますが lambda {}-> {} でも同様に使用することが出来ます。
では、この Kernel.#proc に対してブロック引数を渡さなかった場合どうなるんでしょうか。

Kernel.#proc にブロック引数を渡さなかった場合

Kernel.#proc にブロック引数を渡さなかった場合、『そのメソッドのブロック引数』を返します。

def meth &block
    # meth のブロック引数を返す
    # block と同等
    proc
end

# meth のブロック引数がそのまま返ってくる
p meth { |a, b| a + b }.call 1, 2

一体どういう時に便利なのかわかりません…。
ブロック引数がない場合は nil を返すのかな?と思ったんですが、エラーになってしまうみたいですね。

def meth
    proc
end

# Error: `proc': tried to create Proc object without a block (ArgumentError)
meth

nil を返すのであれば次のように使えるかとも思ったんですが、ダメそう

def meth
    if proc.nil?
        "Not found block."
    end
    yield(1, 2)
end

p meth { |a, b| a + b }
p meth

飲み会の席などで『おれ Ruby しってるんだぜー』アピールに使用してください。