毛無しさん@キレートレモン

Rails SourceCode Reading #1

前半は Ruby の基礎のお話。

http://i.loveruby.net/ja/rhg/book/minimum.html に沿って話した。

要は、全てのモノはオブジェクトである、というお話。

話したこととしては、

  • クラスは Class というクラスのインスタンスである。
  • モジュールは Module というクラスのインスタンスである。
  • Module クラスは Class クラスのインスタンスである。
  • Class クラスは Class クラスのインスタンスである。
  • すべてのクラスは superclass に Object を持つ。 Object クラスの superclass は nil である。

    (今は、Object クラスの superclass は BasicObject になっているぽい。)

    (今日話したときは、「全てのオブジェクトは Object を superclass に持つ」とか言ってた気がする)

とかとか。

一応整理しておくと、

  • オブジェクト間の関係
    • クラス - インスタンスの関係
    • is_a 関係
  • クラス間の関係
    • 継承関係
    • ネスト

今日話した時は、クラス - インスタンスの関係と is_a 関係を混同していた…

is_a 関係について

http://d.hatena.ne.jp/willnet/20080523/1211512760

foo.is_a? Foo が真になるのは、

  • foo が Foo のインスタンスであるとき
  • foo が Foo のサブクラスのインスタンスであるとき
  • foo が モジュール Foo をインクルードしたクラスのインスタンスであるとき
  • foo が モジュール Foo をインクルードしたクラスのサブクラスのインスタンスであるとき

あとは、特異メソッドの話。

結局、includeextend の違いを説明したかっただけな気がする。

後半は ActiveRecord の解読

http://ojima-h.github.com/rails-sourcecode-reading-slide-1/

@@@ ruby
rails generate scaffold Foo foo:string

てやったときにできる Foo#foo ていうメソッドがどうやって定義されているのかを解説した。

  • missing_method コワイ
  • eval コワイ

という結論でした。

ツールについて

  • showoff が便利
  • rdefs.el が便利だけど、使いにくい。 せめて、バッファがリードオンリーなのをなんとかしたい。