何の意味もないRubyメモ

以下たくさんの嘘を含む
Rubyでは全てがオブジェクト.オブジェクトが呼び出せるメソッドには2種類ある

レシーバ
インスタンスメソッド *1
特異メソッド オブジェクト

それぞれ定義方法が違う

class Hoge
  #インスタンスメソッド
  def instance_method; end
  # 特異メソッド
  def self.singleton_method; end 
end

リンク先より,匿名クラスオブジェクトは次のように作れる

Class.new(superclass) { |building_class|
}

また,クラスオブジェクトに名前をつけるには,定数に代入すればいい

irb(main):002:0> hoge = Class.new{ def initialize; p 'hoge'; end}
=> #<Class:0x80105fd80>
irb(main):003:0> Hoge = hoge
=> Hoge
irb(main):004:0> Hoge.new
"hoge"
=> #<Hoge:0x801051d98>

このことから普通のクラス定義はただの糖衣構文だとわかる.なお,ブロック引数とselfは等価なので,冗長な記述の場合,特異メソッドは2通りの宣言方法がある.

class Hoge
  def hoge; end
  def self.hoge; end
end
# ^^^等価vvv
Hoge = Class.new(superclass){|building_class|
  def hoge; end
  def self.hoge; end
# def building_class.hoge; end
}

*1:嘘っぽい