[#31178] in という演算子は? — "たけ(tk)" <ggb03124@...>
in という演算子はないのでしょうか?。
In <20010901205605.B2CB.GGB03124@nifty.ne.jp>
[#31191] クラスメソッドについて — cyross@...
みなさん、初めまして。
まつもと ゆきひろです
サイロスです。
まつもと ゆきひろです
[#31198] Re: [ruby-talk:20696] Re: CORBA Ruby mapping — Daisuke KANDA <MAP2303@...>
[#31205] メソッドの再定義で super は使えますか? — Take_tk <ggb03124@...>
いままで
[#31227] CGI でファイルアップロード — Kamakura Sadanori <kamakura@...>
鎌倉と申します。教えてください。
[#31234] oracle: sub query — Yasushi Shoji <yashi@...>
やすしです。
At Tue, 4 Sep 2001 19:59:11 +0900,
At Wed, 5 Sep 2001 11:46:41 +0900,
[#31238] 半角から全角へ変換 — 吉川 正晃 <yosikawa@...>
吉川と申します。こちらには初めての投稿になります。
わたなべです。
たけ(tk)です。
わたなべです。
あづみです。
たけ(tk)です。
たけ(tk)です。
[#31280] 掲示板の再読み込み時の問題 — みかみまさと <kofu@...>
こんにちは。いつもお世話になっています、みかみと申します。
[#31283] ruby 1.6.5 preview1 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#31294] blade ruby-list thread 表示ストップ — Noritsugu Nakamura <nnakamur@...>
[#31303] net/telnet でホストに接続できない — Satoru Sakashita <sakasita@...>
坂下です。
[#31339] Toshihiko Inoue/mazak は不在にしております。 — Toshihiko_Inoue@...
2001/09/09 から 2001/09/30の間、不在にしております。
[#31369] Ruby 開発環境 RDE0.9.2.0 公開 — 斉藤和樹 <QZS01353@...>
こんにちは。斉藤です。
[#31377] 添付ライブラリのリファレンス (HTML) — "Sadayuki Sakamoto" <flea@...8.dion.ne.jp>
酒本と申します。
吉川です。
酒本です。
新井です。
[#31387] Win32OLE 拡張の試み — arton <arton@...>
artonです。
[#31406] RD format — "K.Kosako" <kosako@...>
RDの仕様について質問ですが、埋め込み用途ではなく、
Toshです。
[#31414] ruby 1.6.5 preview — m_seki@...
なかだです。
なかだです。
なかだです。
まつもと ゆきひろです
[#31419] Hash#+ ハッシュの足し算はいかが? — Take_tk <ggb03124@...>
class Hash
有馬です。
[#31441] 散財自慢 — keiichi matsunaga <ma2@...>
松永です。
[#31443] About Array#index — Takayasu HISANO/久野 孝泰 <taka@...>
はじめて投稿致します。
[#31463] お知恵を拝借 — cyross@...
サイロスです。
[#31486] entry ordering of RAA — Tanaka Akira <akr@...17n.org>
ふと、疑問に思ったのですが、RAA のエントリの順番はどのようにして決まっ
まつもと ゆきひろです
[#31496] Ruby/GTK latest version? — TAKAHASHI Masayoshi <maki@...>
高橋征義です。
[#31499] はじめまして AWK から Ruby — Kusunoki Kaoru <kusunoki@...>
はじめまして。
まつもと ゆきひろです
[#31508] 全角を半角に変換 — yoshikazu tsubaki <y-tsubaki@...>
#2回目の人ごめんなさい(間違えて2つのMLに送信してしまいました)
わたなべです。
In <4518-Mon17Sep2001192412+0900-eban@os.rim.or.jp>
[#31533] ruby 1.6.5 — matz@... (Yukihiro Matsumoto)
Ruby 1.6.5 is released, check out:
[#31551] incorrect float behavior if an extension calls setlocale — akira yamada / やまだあきら <akira@...>
[#31568] net/pop — OHARA Shigeki <os@...>
大原です。
[#31576] eruby が core dump — Teruki Shigitani <shigi@...>
鴫谷と申します。
[#31577] csv-1.0.1 で最後のカラムが isNull = true に — Teruki Shigitani <shigi@...>
鴫谷と申します。
[#31579] eruby の charset について — Teruki Shigitani <shigi@...>
鴫谷と申します。度々ですみません。
[#31588] re:Volume Label の取得法について — bind <bind@...>
さいとうです。
[#31593] 配列の和,積の作り方 — Yamamoto Atsushi <yamamoto@...>
山本と申します.
[#31626] my LC2001 summary — Minero Aoki <aamine@...>
あおき@結局三日連続で飲んでしまった です。
まつもと ゆきひろです
助田です。
なかだです。
あおきです。
artonです。
あおきです。
あおきです。訂正。
高橋征義です。
まつもと ゆきひろです
高橋征義です。
もりきゅうです。
なかだです。
もりきゅうです。
もりきゅうです。
こんにちは、なかむら(う)です。
なかだです。
もりきゅうです。
はじめまして、Kita といいます。
もりきゅうです。
なかだです。
こんにちは、なかむら(う)です。
なかだです。
こんにちは、なかむら(う)です。
もりきゅうです。
もりきゅうです。
もりきゅうです。
もりきゅうです。
もりきゅうです。
もりきゅうです。
[#31634] Marshal するオブジェクトを変更したい — "Shin'ya Adzumi" <adzumi@...>
あづみです。
[#31647] Net::HTTP で post — Kazuhiro NISHIYAMA <zn@...>
cgi-lib.plを使ったcgiにpostできません。
In <20010930113651.A1122@jbtkbc103.jbt.co.jp>
あおきです。
[#31649] pilot .pdb — Masatoshi SEKI <m_seki@...>
[#31653] New project: let me see... — Kazuhiko <kazuhiko@...>
かずひこです。
こんにちは。kadu です。
かずひこです。
かずひこです。
nyasu@3web です。
[ruby-list:31193] Re: クラスメソッドについて
師星と申します。
> 今回知りたいのは「クラスメソッドの概念」についてです。
>
> この間、「プログラミングRuby」を購入して勉強していますが(ちなみに、Ruby
> の本は「RubyでCGI」以外は全て持っています)、クラスメソッドに対しては、
> だいぶ理解に悩んでいます。
いったんクラスメソッドを忘れてお読みはじめ下さい。
1. Rubyのメソッドは、次の2種類に分けられます。
- インスタンスメソッド
- 特異メソッド
1.1. インスタンスメソッドは、そのクラスのインスタンスはどれでも使えま
す。これに関しては特に理解に問題はないかと思います。
例:
class A
def a
print "a"
end
end
a1 = A.new
a2 = A.new
a1.a # => "a"
a2.a # => "a"
1.2. 特異メソッドは、ある特定のオブジェクトだけが使えるメソッドです。
これを定義するには、通常、"def クラス名.メソッド名" という書式を
使います(*1)。
例:
a3 = A.new
def a3.aa
print "aa"
end
a3.aa # => "aa"
a1.aa # => エラー
この特異メソッドの概念は、C++やJavaにはないものです。
2. Rubyでは、クラスも一つのオブジェクトです。
クラスを定義するということは、クラスオブジェクトを一つ生成するとい
うことでもあります。クラスAを定義すると、Aというクラスオブジェクト
が作られるわけです。
クラスメソッドは、このクラスオブジェクトが持つ特異メソッドです(*2)。
例: (1.2の例と見比べてみてください)
def A.aaa
print "aaa"
end
A.aaa # => "aaa"
クラスメソッドを使えるのはクラスオブジェクトAという特定のオブジェク
トだけですから、そのクラスのインスタンスa1、a2、a3では使えません。
例:
a1.aaa # => エラー
2.1. 但し、クラスオブジェクトは、特異メソッドに関して通常のオブジェク
トとは少し異なった特殊な振る舞いをします。
2.1.1. クラスオブジェクトは、上位クラスの特異メソッドを受け継ぎます。
これは「ある特定のインスタンスだけが使える」という特異メソッド
の性質に対する例外です(*3)。
例:
class B < A
end
B.aaa # => "aaa"
2.1.2. (ほかにありましたっけ?)
2.2. いってみれば、Rubyでは、クラスオブジェクトの特異メソッドを、
2.1節のような特殊な取り扱いをすることで、C++やJavaのクラスメソッド
を「模倣」しているのだ、といえます。
ですから、Rubyの世界をストレートに理解するためには、クラスメソッド
という概念をことさらに意識する必要はないと思います。
以上をふまえると、ご質問にある文章は次のように言い換えられるでしょうか。
> 1.クラスメソッドというものは、「オブジェクトを生成しなくても使用できる
> メソッド」ということでしょうか?
「オブジェクト を生成しなくても使用できるメソッド」
→「クラスAのインスタンスを生成しなくても使用できるメソッド」
> 2.クラスメソッドは、「クラスに属するメソッド」という説明と「特定のオブ
> ジェクトに関連づけられないメソッド」という二つがありますが、この二つの関
> 係がよくわからないのですが・・・。
> # いくつか解説書を読むと、「どこかでメソッド定義を行うと、そのクラス内
> で定義しなくても使用することができるメソッド」と取れるのですが・・・
「クラス に属する メソッド」
→「クラスオブジェクトAが受け手であるメソッド」
「特定のオブジェクト に関連づけられない メソッド」
→「クラスAのインスタンス(a1など)が受け手にならない メソッド」
> 3.クラスメソッドは、使用するときに「クラス名.クラスメソッド名」と書く
> のはまだわかるのですが、定義でも「クラス名.クラスメソッド名」と書くのは
> なぜなのでしょうか? ただ単にオブジェクトから使えるメソッドと区別するた
> めでしょうか?(たとえば、オブジェクトがら使えるメソッドと同じ名前でクラ
> スメソッドが使える利点があるとか)
1.2. と 2. を見比べると、それは単に特異メソッドであるから、ということ
がわかりやすいのではないかと思います。