心はいつも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
Everyday Rails頑張る。3章モデルスペック

テスト書いてからコードの決意。 今のような環境がない時代のプログラマでしたが、自 …

no image
iTunesをMacBookAirからWindowsに戻しました。

2月にMacBookAirを購入し、今までWindows上にあったiTunesを …

no image
ToDoの管理方法

東大生はノートがきれいだとか、、 きれいに書いている暇があったら、頭に書いて覚え …

no image
RailsTutorial4.0を高速で復習する。5.6章。演習1問目。

5.6演習です。 一問目。 リスト5.28の静的ページのテストコードは簡潔ですが …

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

3.1章は静的ページの追加。これをトップページとして後で色々追加していきます。 …

パーフェクトRuby 2章Rubyの基礎 2-3 条件分岐と真偽値

p50 2-3 条件分岐と真偽値 falseとnil以外は全部true p51 …

Objective-C苦節3ヶ月アプリ作れるようになった

このブログairpucci.comのメニューにアプリ開発追加しました。 昨年秋よ …

no image
Ruby on Railsのインストール

Rubyのアップデートが終わったので、いよいよRailsをインストールします。 …

no image
gamilアカウントが乗っ取られました

朝起きてすぐ行うメール確認。iphoneでgmail接続できないってエラーが出る …

no image
retweetボタンを追加してみました

最近いろんなブログで見かけるretweetボタン。ブログのエントリーについている …