解決済み

書籍 メタプログラミングRubyの中の一文

  • 困ってます
  • 質問No.7054193
  • 閲覧数260
  • ありがとう数2
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 17% (40/226)

上記書籍のP143の
カレントクラスについて質問です。

上記書籍に、
【クラス定義のなかでは、カレントオブジェクトselfは定義されたクラスである】
という記述がありますが

例えば、以下のようなクラス定義あがあるとします。

class Test

print self.class
def self.method_01()
print "メソッド01"
end

def method_02()
return self
end
end

クラス定義内に3箇所selfが存在しますが、
インスタンスメソッド の method_02()内のselfはnewメソッドによって
作成されたTestクラスのインスタンスの意味だと思います。
それより上の二つのselfは確かに定義中のカレントオブジェクト・・つまりTestクラス
ですけれど、なぜ書籍では、クラス定義内でのselfという表現なのでしょうか?

個人的には、【クラス定義内で定義されるインスタンスメソッド内にあるselfを除くselfはカレントオブジェクトである】という風に、説明すべきだと思うのですが

何か私の解釈に誤りがあるのでしょうか?それとも、文面を気にしすぎなだけでしょうか?
くだらない質問ですがご意見をおきかせください。

質問者が選んだベストアンサー

  • 回答No.2

ベストアンサー率 48% (4413/9097)

解釈としては間違ってないです。
「クラス定義の中で~」の文章を、「メソッド定義の中で~」が上書きする形で、別の意味を与えていると思えば良いと思います。

「クラス定義のコンテキストの中で」の略記と考えた方が良いか。

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 30% (79/257)

>クラス定義内で定義されるインスタンスメソッド内にあるselfを除くselfはカレントオブジェクトである
selfは常にカレントオブジェクトですよ。
ひとつめ、ふたつめのselfは「クラス定義の中」なのでselfは定義されたクラス(クラス名)を返す。
みっつめは「メソッド定義の中」なのでselfはレシーバを返す。
「メタプログラミングRuby」は持っていませんが、そのすぐ後のページにメソッド定義の中のselfの話があるのでは?
お礼コメント
1000vicki

お礼率 17% (40/226)

ああ・・なるほど、定義したクラスからnewしたインスタンスで実行するインスタンスメソッド内のselfは、これも実行中のインスタンスメソッドからすれば同じくカレントオブジェクトということですか・・・。
なるほど・・・・。
投稿日時 - 2011-10-06 22:27:12
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

ピックアップ

ページ先頭へ