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

4.2文字列(string)とメソッド、です。 ここからはrubyの文法について …

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

9.2.2正しいユーザーを要求する、です。 テストを書く 自分以外の人がプロフィ …

no image
rbenvとruby-buildのインストール

諸々のものをインストールしたら、次はHomebrewを使ってrbenvとruby …

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

8.3Cucumberの紹介 (オプション) Cucumberは振舞駆動開発用の …

文字化けもするし、、

自作テンプレ作ったはいいですが、問題が、、。 関連しそうな記事 iTunesをM …

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

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

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

9.2認可、です。 自分以外の人が自分のProfileを変更できないようにします …

no image
Everyday Rails頑張る。3章モデルスペック

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

コンビニで切れないiPhone充電ケーブル買った

iPhone充電に使うライトニングケーブルって高いのに切れ易く涙目。 こんな感じ …

Lionさんがお出まし?AppStoreでのアップデート

MacBookAirのDockにあるAppStoreアイコンになにやらアップデー …