def a_method return yield if block_given? 'ブロックがありません' end puts a_method #=> ブロックがありません puts a_method { 'ブロックがあります!' } #=> ブロックがあります! 用語: クロージャ『Rubyの動かないコード (初級編) ブロックとクロージャの性質 - 主に言語とシステム開発に関して』 の説明が非常に分かりやすかったので、お借りしました。まずはクロージャの説明。 - クロージャの外の(より広いスコープで定義された)変数はクロージャの中からでも参照可能 - クロージャの中で定義された変数はクロージャの外からは参照できない。 これってつまりはブロックと同じようなものということ。 - Rubyのブロックは、ブロック定義時のコンテキスト(変数とか)を保持する - Rubyのブロック内で宣言された