Ruby クラスメソッド ~ビリー・エリオット~

Human Resocia Co.,Ltd.

2015-06-10 12:00

ヒューマンリソシア株式会社はコラム「Ruby クラスメソッド ~ビリー・エリオット~」を公開しました。
###
今回もRubyの不思議を少しだけ垣間見ることにします。

前回のコラムでは、特異クラス/特異メソッドについて解説しました。特定のインスタンスだけに機能追加が可能でこれが特異メソッドでした。 特異メソッドの一種という事でクラスメソッドの正体を明かしたのですが、「クラスメソッドはクラス自身の特異クラスにあることになります。」 ここで疑問が湧きます。クラスの特異クラスとは何のことなのでしょう?

 操作する対象であるインスタンスが、ある特定のインスタンスだけのためのクラスを持つという概念が特異クラスですが、本来設計図であるはずのクラスがインスタンス同様に特異クラスを持つというのが解せません。

 リファレンスマニュアルに因れば、「Rubyでは、クラスもオブジェクトの一つでClassクラスのインスタンスです。」という記載があります。
非常に判りづらいですが、「クラスのクラス」つまりメタクラスとして「Classクラス」が存在するのだそうです。

| class Any; end

| any = Any.new

| p any.class # => Any

| p Any.class # => Class

| p String.class # => Class

| p Fixnum.class # => Class

| p Object.class # => Class

 全てのクラスはClassクラスのインスタンスだったのです。
クラス定義をClassクラスのインスタンス化として考えれば、

| p foo = Class.new # => #<Class:0x10ffbc0>

| p foo.name # => nil

| Foo = foo # 名前のないクラスに定数を指定

| p foo.name # => “Foo”

| p foo.class # => Class

| foo_obj = Foo.new # Fooクラスのインスタンスを生成

| p foo_obj.class # => Foo

 名前のないクラスに定数を指定することでクラス名になるのです。

この続きは以下をご覧ください
(リンク »)
本プレスリリースは発表元企業よりご投稿いただいた情報を掲載しております。
お問い合わせにつきましては発表元企業までお願いいたします。

【企業の皆様へ】企業情報を掲載・登録するには?

御社の企業情報・プレスリリース・イベント情報・製品情報などを登録するには、企業情報センターサービスへのお申し込みをいただく必要がございます。詳しくは以下のページをご覧ください。

NEWSLETTERS

エンタープライズコンピューティングの最前線を配信

ZDNET Japanは、CIOとITマネージャーを対象に、ビジネス課題の解決とITを活用した新たな価値創造を支援します。
ITビジネス全般については、CNET Japanをご覧ください。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]