心はいつもAirPucci (空元気でもいいから)

毎日がPucciを着ているような気分

メタプログラミングRuby第1章

      2014/03/24


初めてのRuby2章と8章をやったところで、メタプログラミングRubyに進みます。

1.3.2 クラス再訪

クラスはオブジェクトでクラス名は定数である

はよいですが、定数であるクラス名の具体的な値が知りたいです。

class Aisatsu
  def harowa
    puts "Hello World"
  end
  def naruwa
    puts "Naruhodo the World!"
  end
end

say1 = Aisatsu.new
say1.harowa
say1.naruwa

say2 = Aisatsu.new
say2.harowa
say2.naruwa

p say1 #=>#<Aisatsu:0x007fabb4971870>
p say2 #=>#<Aisatsu:0x007fabb4971668>

となるので、どこかで管理されているメモリ上のAisatu相対位置が書いてあって、そこからの相対値0x007fabb4971870と0x007fabb4971668が各インスタンスに確保した領域かと思うのですが。

1.5.1 メソッド探索

レシーバと継承チェーンについて。
レシーバは呼び出すメソッドが属するオブジェクトとのこと。インスタンス変数がオブジェクトに、メソッドはクラスに属するの原則に従うなら、「呼び出されるメソッドが属するオブジェクト」と言った方がわかりやすい。

class Receiv
  def yobidasuyo
    puts "yobidasaretayo"
  end
end

yobidasuze = Receiv.new
yobidasuze.yobidasuyo #=> yobidasaretayo

継承チェーンはメソッドのたくり方の順番。オブジェクト直属のクラスにメソッドがなかったら、その上、その上、というのはわかるので、特異クラスがあったらどうなるか、やっぱりジョジョでやってみる。

class Jonathan
  def shodai
    puts "Jonathan Joestar"
  end
end

class Lisalisa < Jonathan
  def nidaime
    puts "Lisa Lisa"
  end
end

class Joseph < Lisalisa
  def sandaime
    puts "Joseph Joestar"
  end
end

class Holly < Joseph
  def yondaime
    puts "Holly Kujo"
  end
end

class Jotaro < Holly
  def godaime
    puts "Jotaro Kujo"
  end

  def lasbos
    puts "Jotaro's LastBoss is Pucci."
  end
end

class Jorin < Jotaro
  def rokudaime
    puts "Jorin Kujo"
  end
end

jorin = Jorin.new
 

jorin.rokudaime #=> Jorin Kujo
jorin.shodai #=> Jonathan Joestar
jorin.lasbos #=> Jotaro's LastBoss is Pucci.


class << jorin #特異クラス
  def lasbos
    puts "Jorin's LastBoss is Pucci."
  end
end

jorin.lasbos #=> Jorin's LastBoss is Pucci.

jorin.shodaiのレシーバはJonathanクラス。
jorin.lasbosのレシーバはJotaroクラス。
jorinオブジェクトに特異クラスを作ってあげるとメソッド探索は特異クラスが優先になって、jorin.lasbosのレシーバはjorinオブジェクト特異クラス。

 - テクニカル , ,

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  関連記事

no image
wordpressはじめます

ブログを立ち上げるのは久しぶりです。 以前から、ブログメディアをやりたいと思って …

Google Webfont使ってみたよ

地元に戻ってきてまず思ったのは「観光サイトを立ち上げたい」ということ。いや、観光 …

no image
いまだにユビキタスなSONYとクラウドに向かうApple

PS3のトルネが良さそう@ヤマダ電機。PS3本体とチューナーの2台になってスッキ …

no image
Mavericksでruby2.0 rails4.0.0のGem

MacBookAirにMavericksインストールして初めてのrails ne …

no image
iPad vs. VAIO P 持ち歩き編。

旅に出かけるときはケーブルと一緒です。ドコモ携帯、VAIO P、iPhone、W …

MacにGUIのSQLite3クライアントを入れる。

ターミナルからコマンドたたけばいいだけですが、DBスキーマをちょっと確認したいと …

no image
RailsTutorial4.0を高速で復習する。7.1.2章

7.1.2ユーザーリソース、です。 /user/newを/signupで表示させ …

MacBookAirにMavericksインストールしました

先週の話になってしまいますが、MacBookAirにMavericksインストー …

no image
RailsTutorial4.0を高速で復習する。4章と4.1章。

さて、4章です。4章ではRubyに関する内容が多かったような記憶が。 動的なWe …

no image
RailsTutorial4.0を高速で復習する。6.2.5章。

6.2.5一意性を検証する、です。メールアドレスをIDとして使うため(でなくとも …