LoginSignup
3
1

More than 5 years have passed since last update.

特異メソッドとクラスメソッド

Last updated at Posted at 2018-01-13

rubyの特異メソッドとクラスメソッド

クラスメソッドは、実際には特異メソッドである

Rubyの入門書を読んでいてこう書いてあった。
それぞれ調べてみた。

特異メソッド
特定のオブジェクトに対して、定義するメソッド。

クラスメソッド
オブジェクトではなく、クラスから呼び出されるメソッド。

違うものなのに一緒ってどういうことなんだろう?

rubyでは、ほとんどがオブジェクトである。

メソッドやブロックなど一部を除き、様々な値やクラスも含めてほとんどはオブジェクトである。下記を、見ればわかりやすい。
Objectクラスのclassメソッドは、さまざまなオブジェクトのクラスを調べることができる。

[1] pry(main)> 1.class
=> Fixnum
[2] pry(main)> "a".class
=> String
[3] pry(main)> [1,2].class
=> Array
[4] pry(main)> {:x => 1}.class
=> Hash
[5] pry(main)> true.class
=> TrueClass
[6] pry(main)> nil.class
=> NilClass


# それぞれのクラスもClassクラスのオブジェクト
[9] pry(main)> String.class
=> Class
[10] pry(main)> Fixnum.class
=> Class
[11] pry(main)> String.class
=> Class
[12] pry(main)> TrueClass.class
=> Class

上記を踏まえて、
クラスメソッドを定義してみる

class String
  def self.hoge
    # なんかしらの処理
  end
end

hogeメソッドを、Stringクラスのクラスメソッドとして定義した。
StringクラスもClassクラスのオブジェクトであれば、
hogeメソッドが、Classクラスのオブジェクトの特異メソッド
と言える。

よって

クラスメソッドは、実際には特異メソッドである

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1