Ruby 2.3.1 で動作確認
Ruby におけるクラスは Class クラスのインスタンスです。
つまり、 Class.new
を活用すれば、class 構文使わなくてもクラス作れるんじゃね?と思いついたので、class 構文を使わずにクラスをつくってみることにした。
普通にクラスを定義する
今回作るクラスは以下の通り。なんとも味気ない……
class Dog
def initialize
@age = 1
end
def bow
puts("bow")
end
end
このクラスを、class 構文を使わずに定義し、インスタンスを作成する。
Class クラスをインスタンス化し、定数に格納する。
Dog = Class.new do |clazz|
def initialize
@age = 1
end
def bow
puts("bow")
end
end
# 動作確認
dog = Dog.new
dog.bow
class Dog
が Dog = Class.new do |clazz|
になっただけだが、この変化は非常に重要な意味を持つ。Class クラスのnew は、引数にブロックを受け取る。つまり、上から順に処理が実行されていく。
C++ からruby に移ってきた時の私は、
class Sample
puts("Hello ruby")
end
が、なんで問題なく動くのか疑問だったが、上記で納得した。