🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.lang.ruby
Article #53

Re: initialize method

#53
From: Yukihiro Matsumoto
Date: Thu, 26 Feb 1998 00:00
46 lines
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-mail
References: <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