Article View: fj.lang.ruby
Article #52Re: initialize method
From: Shugo Maeda
Date: Thu, 26 Feb 1998 00:00
Date: Thu, 26 Feb 1998 00:00
48 lines
2207 bytes
2207 bytes
前田です。 j8197602@ed.noda.sut.ac.jp (Akira Ikarashi) wrote: |1. list.rb でコメントされているように、initializeメソッドが「オブジェ |クト生成時に自動的に呼ばれるメソッド」であるということは、どのドキュメ |ントを見ればわかるのでしょうか? マニュアルの Object.html#initialize の部分をご覧ください。 正確にはオブジェクトの生成時ではなくClass#newの中で呼ばれています ので、一部の組み込みクラスのようにnewを再定義しているクラスでは initializeは呼ばれませんから注意が必要です。 |2. mailread.rb において、Mail.new(f)というメソッドの中でsuper(f)が呼ば |れています。Mailクラスのスーパークラスのnewメソッドということで、 |Object.new(f)が呼ばれると思ったのですが、実際はMail.initialize(f)が呼 |ばれているようです。これは何故なのでしょうか? new(f)の中で生成したオブジェクトのinitializeを呼んでいるからです。 模式的に書くとこんな感じです。 def new(*args) obj = オブジェクトの生成 obj.initialize(*args) return obj end |また、これに関係すると思うのですが、newではなくMail.newとして宣言され |ているのは何故なのでしょうか? newはインスタンス(オブジェクト)のメソッドではなく、クラスのメソッド だからです。 # 逆にinitializeはインスタンスメソッドです。 クラスメソッドを定義する場合は def ClassName.method_name(args ...) のようにします。 # 正確にはこれはクラスオブジェクトの特異メソッドなのですが、あまり # 気にしなくてよいと思います。 -- 前田 修吾
Technical Details
Message-ID:
<86hg5ngmur.fsf@soleil.localnet.or.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: shugo@po.aianet.ne.jp (Shugo Maeda) Subject: Re: initialize method Date: 1998/02/26 Message-ID: <86hg5ngmur.fsf@soleil.localnet.or.jp> X-Deja-AN: 328702465 References: <6d1j39$1lqa@sutnserv.ed.noda.sut.ac.jp> Content-Type: text/plain; charset=ISO-2022-JP X-Emacs: Emacs 20.2, MULE 3.0 (MOMIJINOGA) Organization: AIANet Internet Service Mime-Version: 1.0 (generated by SEMI MIME-Edit 0.100 - "Otomaru") Newsgroups: fj.lang.ruby