アプリ版:「スタンプのみでお礼する」機能のリリースについて

上記書籍の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はカレントオブジェクトである】という風に、説明すべきだと思うのですが

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

A 回答 (2件)

解釈としては間違ってないです。


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

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

>クラス定義内で定義されるインスタンスメソッド内にあるselfを除くselfはカレントオブジェクトである


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

ああ・・なるほど、定義したクラスからnewしたインスタンスで実行するインスタンスメソッド内のselfは、これも実行中のインスタンスメソッドからすれば同じくカレントオブジェクトということですか・・・。
なるほど・・・・。

お礼日時:2011/10/06 22:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!