心はいつも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
RailsTutorial4.0を高速で復習する。6.3章。

6.3セキュアなパスワードを追加する、です。 パスワードはセキュアであるべきと思 …

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

10.3マイクロポストを操作する、です。 仕様の理解 ポストはユーザーだけが投稿 …

no image
iPhoneのKindleアプリでChip Conley氏の本を読んでみました。その1

GWで電子本も文庫本も読み終え、「新しい本に入れ替えないと~」と思いながらすっか …

初めてのRuby2章「配列とハッシュ」

Railsだってgemの一種!ってことで、Rubyの文法からちゃんとやりたいです …

no image
iPhoneの月請求は8円のみです。

昨年11月に、e-mobileからiPhoneにMNPしました。 ちょうど、乗り …

WindowsキーボードをMacで使う

キーボード難民です。Mac miniでApple純正のキーボードを使っていました …

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

8章で随分おなかいっぱいになりました。 第9章 ユーザーの更新・表示・削除、です …

no image
RailsTutorial4.0を高速で復習する。5.6章。演習2問目のつづき。

5.6章。演習2問目です。TDDにこだわり、あえてこの問題をするまで、ヘッダーや …

iOS developerプログラムに登録しました

iPhoneアプリを初めてリリースしたのは2010年7月です確か。 デベロッパー …

Mac miniの液晶モニターにDell U2713HM使っています。

次期モデルが出るかもしれないのにMac miniを買って、自分でメモリを16Gに …