对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
,但那是另一回事。
对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
,但那是另一回事。
您需要覆盖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
方法并返回初始化的实例。
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