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 回答