7つの言語7つの世界 Ruby 3日目

試してみよう

感想等

3章はRubyメタプログラミングの紹介、メタプログラミングとはプログラムを書くプログラム
Rubyの機能を使えばDSL(ドメイン固有言語)を構築することが簡単に出来る(らしい)
メタプログラミングRuby欲しくなった。
Rubyの3日分の「試してみよう」の他の人の解答見ると、奇麗なコード多すぎて嫉妬。
読んでる間ずっとリファレンスマニュアルと睨めっこだった。
もっとちゃんとした本を一冊かって頭に叩き込まれるまで勉強したいなぁ。
一番良いのは忘れないように毎日何か書く事だろうけど。書かないと何回も調べたことでも忘れちゃう気がする。

試してみようの3日目

元々定義されてるメソッドと同じheadersが設定されてたらmethod_missing呼ばれない。
なので定義されてるメソッドをundefしていく必要があるみたい。
メソッドをまっさらに消すのをブランクスレートと呼ぶらしい。

メタプログラミングに利用出来る機能
  • オープンクラス
    • クラスを定義した後からでも変更出来る
    • 普通はメソッドを追加する時に変更する
    • メソッドを追加する前に作成したオブジェクトからでも追加したメソッドを呼び出せる
    • DSLを作成する時に便利
  • method_missing
    • phpの__callとか__getのようなものか。
    • 例として出ているローマ字がすごい。
  • モジュール
    • 最も人気のあるスタイル
    • 「マクロと呼ばれるモジュールメソッドを使う」
    • acts_as_csvマクロでdefine_methodを使ってCSVファイルに関する全ての動作を定義(acts_as_csv.rb)
本見ながら書いたもの