1章はイントロダクションで、メタプログラミングのイメージを膨らませる。
Summary
- とりあえずのメタプログラミングの定義はコードを記述するコード
- Ruby では実行時に言語要素に質問することができる
- これをイントロスペクションという
- 実行時にクラスの情報を読み取れるこの性質を
ActiveRecordは利用している - 特定の規約にもとづきモデルクラスとデータベースのテーブルをマッピングする
- 一例が
Movie=>movies(このライブラリは英単語の単数形・複数形を変換する方法#pluralize,#singularizeを持つ) - おかげでデータベースのアトリビュートに基づきアクセサメソッドを動的に定義できる
Play
ohbas-MacBook-Pro:chapter1_the_m_word ohbarye$ irb irb(main):001:0> require './introspection.rb' => true irb(main):002:0> my_object = Greeting.new 'Yo' => #<Greeting:0x007f98cb8402e0 @text="Yo"> irb(main):003:0> my_object.class => Greeting irb(main):004:0> my_object.class.instance_methods false => [:welcome] irb(main):005:0> my_object.instance_variables => [:@text] irb(main):006:0>
Further
上記のメソッドはそれぞれ以下のクラスで定義されている。
#class=> Obejct クラス#instance_method=> Module クラス#instance_variables=> Obejct クラス
Ruby 2.3.0 から本体に含まれるようになった did_you_mean gem も NoMethodError がスローされた箇所で呼び出せるメソッドや変数を動的に取得することで実現されている、という話を RubyKaigi で聞いた。
いつもすごく助かっている。
頭文字Aはやはり『頭文字D』から来ている?