今日はじめて知ったというか引数のない proc メソッドがどういう動きをするのか今までちゃんと理解していなかったなあと思った。 Kernel#proc は Proc.new のショートハンドラで、Object によって Kernel が include されているので Object 派生クラスではレシーバを省略して proc と呼べる。 では本題。 def do_block(&block) yield if block end ナンセンスなコードだけどまあこういうのがあったとする。 これは、 def do_block yield if block_given? end こう書けるよね。 じゃあ、 def add_handler(name, &block) if block @handlers[name] = block else raise end end ここで block_given?