Article View: fj.lang.ruby
Article #53Re: initialize method
From: Yukihiro Matsumoto
Date: Thu, 26 Feb 1998 00:00
Date: Thu, 26 Feb 1998 00:00
46 lines
2638 bytes
2638 bytes
まつもと ゆきひろです j8197602@ed.noda.sut.ac.jp (Akira Ikarashi) writes: |はじめまして、五十嵐@東京理科大学です。 |1. list.rb でコメントされているように、initializeメソッドが「オブジェ |クト生成時に自動的に呼ばれるメソッド」であるということは、どのドキュメ |ントを見ればわかるのでしょうか? list.rb ^^;;; それとリファレンスマニュアルの Object.html にも以下のように 書いてあります. initialize(...) ユーザ定義クラスのオブジェクト初期化メソッド.このメソッドは Class#newから新しく生成されたオブジェクトの初期化のために呼 び出されます.デフォルトの動作ではなにもしません.サブクラス ではこのメソッドを必要に応じて再定義されることが期待されてい ます.initializeにはClass#newに与えられた引数がそのまま渡さ れます. |2. mailread.rb において、Mail.new(f)というメソッドの中でsuper(f)が呼ば |れています。Mailクラスのスーパークラスのnewメソッドということで、 |Object.new(f)が呼ばれると思ったのですが、実際はMail.initialize(f)が呼 |ばれているようです。これは何故なのでしょうか? これはMail.newはMailオブジェクトのメソッドではなく,Mailクラ スのメソッドですから,superはMailクラスオブジェクトのクラス であるClass#newを呼び出します.このClass#newが新しくオブジェ クトを生成して,そのオブジェクトに対してinitializeを呼んでい ます. もっとも,このようなnewを再定義するやり方は「悪い例」です. 今では反省して,initializeを再定義するようなやり方をお勧めし てます(1.1のmailread.rbでは直してます). |また、これに関係すると思うのですが、newではなくMail.newとして宣言され |ているのは何故なのでしょうか? 上述の通りruby流のやり方が定着する前の「若げの至り」です.許 して…. まつもと ゆきひろ /:|)
Technical Details
Message-ID:
<lvu39nrri0.fsf@picachu.netlab.co.jp>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<6d1j39$1lqa@sutnserv.ed.noda.sut.ac.jp>Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS X-Google-Thread: 13488f,be3629367ea86103 X-Google-Attributes: gid13488f,public From: Yukihiro Matsumoto <matz@netlab.co.jp> Subject: Re: initialize method Date: 1998/02/26 Message-ID: <lvu39nrri0.fsf@picachu.netlab.co.jp> X-Deja-AN: 328720288 References: <6d1j39$1lqa@sutnserv.ed.noda.sut.ac.jp> Content-Type: text/plain; charset=ISO-2022-JP X-Complaints-To: usenet@riccia.linux.or.jp X-Trace: riccia.linux.or.jp 888462601 13070 (None) 202.218.249.224 Organization: Network Applied Communication Laboratory, Japan Mime-Version: 1.0 (generated by tm-edit 7.106) Newsgroups: fj.lang.ruby