心はいつも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

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

  関連記事

40秒も待てない。

自由が丘のカフェでこれ書きました。Table Modern Service、食べ …

実機なしでRetina 3.5インチのスクリーンショットを撮る

iPhoneアプリ公開時に2種類の画像登録が必要です。 1つ目はアイコン。アプリ …

詳解 Objective-C 2.0 第3版 CHAPTER4 オブジェクトの型と動的結合

CHAPTER4は「オブジェクトの型と動的結合」なんだけど、 動的結合ってなに? …

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

6.2.3長さを検証する、です。空データを拒否した次は、入力できるデータ長の制限 …

no image
電源が入らない!MacBookAirが真っ黒になりました。

iPhoneを買ったばかりの頃、iPhoneのメーラーを立ち上げても中身が表示さ …

RailsTutorial4.0を高速で復習する。10章。

第10章ユーザーのマイクロポスト、です。 has_many、belongs_to …

no image
恐ろしや、WordPressのDBパスワードは平文でおいてある

先ほどサーバーのDBをいじっていてですね、、久々だったのでDBパスワード忘れてし …

no image
ヘルパーメソッドを自作する

便利なrailsのヘルパーメソッド。自分でも作れます。 作るときは、 アプリのd …

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

4.6演習、です。4章がRubyの説明章だったので演習はRuby問題になっていま …

no image
あんたのrakeは新しいけど古いのが必要なんだよっ!!と怒られた

Mavericksってrubyが2.0になったんですね。 てのはおいといて、 r …