From: Akira Endo Date: 1999-07-09T12:42:46+09:00 Subject: [ruby-list:15332] Re: rubyfaq-990702.tar.gz 遠藤です. 稲葉さんから,詳細なチェックをいただき感謝しています. In [ruby-list:15321] Re: rubyfaq-990702.tar.gz Inaba Hiroto wrote: > Q. オブジェクトにメッセージを送った時に実行されるメソッドはどのように > 捜されますか? 定数のスコープの説明と似たようなことになりますが, 特異メソッド 自クラスで定義されているメソッド スーパークラス(Mix-inされたモジュールを含む.ancestorsで表示できる)で 定義されているメソッド の順にさがされます. ということでいいでしょうか. > > +や-などは演算子ではなくメソッド呼び出しです.したがってオーバーライド > > することもできます. > > 以下4.1の回答ではオーバーライドという語が使われています.自分はこ > こでの説明では「オーバーライド」(上書き)ではなく,「オーバーロード」 > (多重定義)という語の方がしっくりきます.(もちろんオーバーライドも > できるのですが) そもそも,元で定義されていなければ,オーバーロードもないので, それもいれておきましょう. > 「特に, クラスObject(またはObjectがインクルードしているモジュール) > で定義されたメソッドは全ての通常のインスタンスをselfとする環境から > 関数形式で呼び出せます.これらのメソッドでselfの状態にかかわらず同じ > 値を返すものは一般の言語における関数のように用いられます」 前半はいいのですが,後半のselfの「状態」というのがちょっとひっかかり ました.まず関数を定義してやる必要があるのかもしれません.ちょっと 考えさせてください. > > 4.9 引数は参照渡しですか > > > 参照渡しです.したがって,参照されているオブジェクトが,自分の状態を変 > > 更するメソッドを持っている時には,副作用(それが主作用かもしれません > > が)に注意する必要があります. > > Pascal,Fortran等の言語で言う「参照渡し」の意味とは違うと思います. > C++の「参照型」とも違いますし.「値渡しです. が,Rubyではほとんどの > 場合値そのものが参照なので,参照渡しの側面があります」という方がい > いと思います. (初心者には難しい記述かもしれないけど..) Lispと同じな > のは確かです. これもまさにFAQの中心ですが,オブジェクトの名札の値渡しで,名札は 即値だったり,参照だったりします??? 実装よりの説明にした方が分かりやすいのかもしれません.代入の説明 からはいるわけですが.そういえば代入の説明がまさに必要ですね. > Q. 引数への代入をするとどうなりますか。 > A. 引数への代入を行ってもメソッドの呼び出し側には影響はありません これは答の意味がよく分からなかったので抜いてしまったのですが, 今ようやく分かりました.メソッド呼び出しで引数に代入する瞬間を 思い浮かべてしまっていました. > a.gsub!(/([^\t]{8})|([^\t]*)\t/n){$+.pack("A8")} a.gsub!(/([^\t]{8})|([^\t]*)\t/n){[$+].pack("A8")} なるほど,8個ずつ切っていく方法がありましたか.nは,元のには なくてもよさそうですね.SJISの2バイト目はどうなってるんだったか 忘れてしまいました.調べておきましょう. 前田さんの意見も参照(!!)しながら,修正させていただきます. その他のご意見は,すべて採用させていただきました.ありがとう ございました.