0

Rubyのinitialize方法について少し混乱しています。

他のメソッドのように値を返さないのはなぜですか?

class SomeClass

  attr_reader :val

  def initialize a, b, c
    @val = a + b + c
    @val
  end

end

val = SomeClass.new 1, 2, 3

初期化されていないオブジェクトである必要valがあります。6

もちろん使えますval.valが、それはまた別の話です。

4

2 に答える 2

2

メソッドをオーバーライドする必要がありますself.new

class SomeClass
  def self.new(*)
    instance = super
    instance.val
  end

  attr_reader :val

  def initialize a, b, c
    @val = a + b + c
    @val
  end

end

p SomeClass.new 1, 2, 3
#=> 6

クラスのインスタンスを作成すると、実際self.newにはそのクラスを呼び出してinitializeメソッドを呼び出し、初期化されたインスタンスを返します。

ライブデモはこちら

于 2012-11-19T13:18:25.570 に答える
1

initialize他のメソッドと同様のメソッドです。もちろん、他のメソッドと同様に戻り値を返します。

そうではないという印象を与えたのは何ですか?提供したコード サンプルを呼び出すことはありinitializeません。では、それが返す値をどうやって知るのでしょうか?

class SomeClass
  attr_reader :val

  def initialize a, b, c
    @val = a + b + c
    @val
  end

end

obj = SomeClass.allocate
val = obj.send :initialize, 1, 2, 3
# => 6
于 2012-11-19T13:45:38.253 に答える