Ruby で #initialize を呼ばずにクラスのインスタンスを生成する
通常はクラスからインスタンスを生成するときに .new
を使用するんですが、類似するクラスメソッドに .allocate
というメソッドがあります。
.allocate
も .new
と同様にクラスのインスタンスを生成するんですが #initialize
が呼ばれないという特性があります。
class X attr_reader :value def initialize @value = 42 end end # X#initialize が呼ばれる x = X.new p x.value # => 42 # X#initialize が呼ばれない x2 = X.allocate p x2.value # => nil
どういう時に .allocate
って使うんですかね?
どうしても #initialize
で初期化されてないほしくない場合とかあるのかなあ…。