何の意味もない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:嘘っぽい