2011年4月3日日曜日

「メタプログラミングRuby」のメモ1

「メタプログラミング Ruby」の月曜日

「メタプログラミングRuby」を読みはじめた。月曜日のメモ。

  • モンキーパッチとは:既存のクラスを(安易に)再オープンして拡張すること。外部ライブラリを導入している場合、名前空間のすべてを把握することは困難。そのため、知らず知らずのうちにモンキーパッチをしてしまう危険性がある。だからこそ、unit testが必要。
  • Kernelはモジュール。Rubyではモジュールをincludeすると無名クラスでwrapされて、継承ツリーの一つ上に置かれる。このクラスは'include class'とか'proxy class'とか呼ばれる。無名クラスはsuperclass()メソッドには存在したものとして扱われる。Rubyのコードでも普通はアクセスできない。
  • Rubyでは常にobjectの内側にいることで、ObjectクラスにインクルードされているKernelモジュール のプライベートインスタンスメソッドであるprint()などにアクセスできる。こうすると、メソッドであるprint()が言語のキーワード(予約語)であるように見える!!これはかっこいいな。これはつまり、kernel mothodにすると、すべてのオブジェクトで使えるようになる!!すごい。こういうことをしている例が、ruby gem。
  • メソッドを呼び出すときselfがレシーバになり、レシーバを明示的に指定せずにメソッドを呼び出すとselfのメソッドだとみなされる。

火曜日も楽しみ。

0 件のコメント:

コメントを投稿