🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.lang.ruby
Article #52

Re: initialize method

#52
From: Shugo Maeda
Date: Thu, 26 Feb 1998 00:00
48 lines
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-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: 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