def a_method return yield if block_given? 'ブロックがありません' end puts a_method #=> ブロックがありません puts a_method { 'ブロックがあります!' } #=> ブロックがあります! 用語: クロージャ『Rubyの動かないコード (初級編) ブロックとクロージャの性質 - 主に言語とシステム開発に関して』 の説明が非常に分かりやすかったので、お借りしました。まずはクロージャの説明。 - クロージャの外の(より広いスコープで定義された)変数はクロージャの中からでも参照可能 - クロージャの中で定義された変数はクロージャの外からは参照できない。 これってつまりはブロックと同じようなものということ。 - Rubyのブロックは、ブロック定義時のコンテキスト(変数とか)を保持する - Rubyのブロック内で宣言された
![メタプログラミングRuby第2版 / 第4章ブロック[勉強メモ]](https://cdn-ak-scissors.b.st-hatena.com/image/square/c2ea7e72d0d7f3ba6c237909f321e67ffbdaa24e/height=288;version=1;width=512/https%3A%2F%2Ffanyv88.com%3A443%2Fhttps%2Fmorizyun.github.io%2Fimg%2Fog_image.png)