[#47414] <=>の意味は? — "T.Soejima" <clev@...2.so-net.ne.jp>

そえじま@勉強中です。

37 messages 2010/09/17
[#47420] Re: <=>の意味は? — 藤川浩明 <fhir0aki3@...> 2010/09/17

 他の方がすでに解答されているみたいですが、一応僕なりの答えを書いてみます。僕もRuby初心者なのではっきりとは言えないんですが・・・。

[#47422] Re: <=>の意味は? — "T.Soejima" <clev@...2.so-net.ne.jp> 2010/09/17

そえじま@勉強中です。

[#47424] Re: <=>の意味は? — "Y. NOBUOKA" <nobuoka@...> 2010/09/17

信岡です。

[#47426] Re: <=>の意味は? — "T.Soejima" <clev@...2.so-net.ne.jp> 2010/09/17

そえじま@勉強中です。

[#47428] Re: <=>の意味は? — "Y. NOBUOKA" <nobuoka@...> 2010/09/17

そえじまさん

[#47429] Re: <=>の意味は? — "T.Soejima" <clev@...2.so-net.ne.jp> 2010/09/17

そえじま@勉強中です。

[#47433] Re: <=>の意味は? — 藤川浩明 <fhir0aki3@...> 2010/09/18

GyRCISE/JyE5SlZFeiQ3JD8kJCRIO1ckJCReJDckPyQsISI7fjRWJCxMNSQkJE4kRyFWGyhCT09Q

[#47435] Re: <=>の意味は? — "T.Soejima" <clev@...2.so-net.ne.jp> 2010/09/18

そえじま@勉強中です。

[#47438] Re: <=>の意味は? — masayoshi takahashi <maki@...> 2010/09/18

高橋征義です。『たのしいRuby』の著者の片割れの方から来ました。

[ruby-list:47428] Re: <=>の意味は?

From: "Y. NOBUOKA" <nobuoka@...>
Date: 2010-09-17 16:17:33 UTC
List: ruby-list #47428
そえじまさん

信岡です。

>> メソッド内における self は、メソッドのレシーバオブジェクトを参照します。
>>
> ということは、
>
>> class Foo
>>   def getSelf
>>     return self
>>   end
>> end
>>
>> foo = Foo.new()
>> foo.equal? foo.getSelf() #=> true: Foo#getSelf メソッドは self を返す. メソッド内の
>> self はレシーバ foo の参照先オブジェクト
>>
>>
> この場合は self というのは Foo を意味しているということでしょうか?

いえ、self は変数 foo の参照先オブジェクト (クラス Foo に属するインスタンスオブジェクト) を指します。

>> module Mod
>>   def getSelfInMod
>>     return self
>>   end
>> end
>>
>> class Foo
>>   # モジュール Mod をミックスインする
>>   include Mod
>> end
>>
>> foo = Foo.new()
>> foo.equal? foo.getSelfInMod() #=> true: foo.getSelfInMod メソッドはモジュール
>> Mod で定義されている.
>>                                            # getSelfInMod メソッド内の self
>> はやはりレシーバ foo の参照先オブジェクト
>>
>> メソッドがモジュールで定義されている場合でも同様で、変数 foo の参照先オブジェクトをレシーバとしてメソッド getSelfInMod
>> を呼び出すと、getSelfInMod メソッド内の self は foo の参照先オブジェクトを参照します。
>>
>>
> で、この場合は実質的にmoduleの方を指しているという認識でいいのでしょうか?

この場合も self は変数 foo の参照先オブジェクト (クラス Foo に属するインスタンスオブジェクト) を指します。

重要なのは 「メソッド内の self はメソッドのレシーバオブジェクトを指し示す」 ということです。
 (メソッドがFoo クラスの中で定義されているのか、Mod モジュールの中で定義されているのかは関係がなく、変数 foo
の参照先オブジェクトをレシーバとしてメソッドが呼び出された場合は、メソッド内の self は変数 foo の参照先オブジェクトを指し示す。)

> ただ、こうだとすると他にもいろいろ疑問が沸いてくるのですが・・・
> 例えば、同じ名前のメソッドを複数Mix-inしてしまった場合とか・・・
> (飲み込みが悪くて申し訳ありません。m(__)m)
>
> ご教示いただけると幸いです。
> なんとなくこのあたりがスッキリしないと先に行けないような気がするので
> よろしくお願いいたします。

確かにこのあたりを理解するのは重要だと思います。
「self はレシーバ foo の参照先オブジェクト」 という私のコメントに対して 「この場合は self というのは Foo
を意味しているということでしょうか?」 との返信を書かれているので、クラスベースのオブジェクト指向 (クラスとインスタンスの関係など)
についての理解が浅いのではないかと思うのですが、その点は大丈夫でしょうか?

-- 
信岡 裕也 (NOBUOKA Yuya)
e-mail: nobuoka@r-definition.com

In This Thread