【Ruby】特異クラス定義と特異メソッド

ABOUTこの記事をかいた人

気になること&知らないことをひたすらググることを得意としています。このブログでは最近気になったことを中心に記事を書いていきます。記事には間違った情報を書かないように細心の注意を払っていますが、もし誤りがあった場合はコメントやお問い合わせフォームからご指摘いただければ幸いです。

下記のような記述にて「class << TestClassまたはself」で書いたクラス定義を特異クラス定義といいます。そしてそこで定義されたメソッドを特異メソッドといいます。下記の場合で特異メソッドは、「say_a,b,c」となります。

a
b
c

特異メソッド

特異クラス定義

特異メソッドは任意のオブジェクト(インスタンス)にメソッドを追加することができます。上記「singleton_class.rb」の場合は一見「TestClass」というクラスにメソッドを追加しているように見えますが、実際は「Class」クラスのオブジェクトとして「TestClass」があり、その「TestClass」オブジェクトに対してのインスタンスメソッドが定義されて、結果的に特異メソッドとなります。

Class

上記の実行結果をみても「TestClass」クラスが「Class」クラスのオブジェクトであることが良くわかりますね。

特定のインスタンスに定義

また下記のように特定のオブジェクト(インスタンス)にメソッドを定義(追加)することができます。

d
e

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

ABOUTこの記事をかいた人

気になること&知らないことをひたすらググることを得意としています。このブログでは最近気になったことを中心に記事を書いていきます。記事には間違った情報を書かないように細心の注意を払っていますが、もし誤りがあった場合はコメントやお問い合わせフォームからご指摘いただければ幸いです。