ようへいの日々精進XP

よかろうもん

2018 年 02 月 04 日(日)

ジョギング

  • 腰痛、悪天の為、お休み

日課

  • お休み

腰痛

  • 寒さも合わさって, だいぶん酷い

今日のるびぃ ~ クラスメソッド = 特定クラスの特異メソッドである件について ~

クラスメソッド, 特異メソッドとかが有耶無耶に理解している状態で, プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで の第七章を読んでいて, 目から鱗だったのでメモ.

  • 特異メソッド (singleton メソッド) を利用して, オブジェクト単位で挙動を変えることが出来る
  • クラスメソッドは特異メソッドの一種
    • String や User のようなクラスもオブジェクト
    • クラス (というオブジェクト) に特異メソッドを定義することでクラスメソッドのように見える
    • RubyAPI ドキュメントでもクラスメソッドではなく特異メソッドとして書かれている

なるほど.

ということで, クラスメソッド (クラスに特異メソッドを定義したもの) の定義とと特異メソッドの定義について整理.

# クラスメソッドの定義
class User
end

# 定義方法 (1)
def User.hello
  'Hello.'
end

# 定義方法 (2)
class << User
  def hi
    'Hi.'
  end
end

# 特異メソッドの定義
foo = 'bar'

# 定義方法 (1)
def foo.hello
  'Hello.'
end

# 定義方法 (2)
class << foo
  def hi
    'Hi.'
  end
end

ほうほう, プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで とても読みやすくて, 解りやすくて濡れる.