对于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
,但这是另一个故事。
答案 0 :(得分: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
方法并返回初始化的实例。
答案 1 :(得分: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