「メタプログラミング 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 件のコメント:
コメントを投稿