Ruby 如何使`SomeClass.new`返回计算值而不是创建的对象
对Ruby的Ruby 如何使`SomeClass.new`返回计算值而不是创建的对象,ruby,Ruby,对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。新的方法: class SomeClass de
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。新的方法:
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
方法并返回初始化的实例
请参见您需要覆盖self。新的方法:
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
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
这毫无意义,新建!=<代码>初始化
,在OOP中,新的
类方法必须返回实例。如果您对创建类的实例不感兴趣,为什么不使用classmethod呢?从设计的角度来看,这不是一个好主意。New应该返回一个新初始化的对象,否则对其他程序员来说是不明显或不直观的。当然,如果没有其他人会看到这段代码,那也没关系。。。直到三个月后你看到它,想知道代码中发生了什么。这只是一个练习,是的,有人建议我不要在生产中使用它。这毫无意义,new
!=<代码>初始化
,在OOP中,新的
类方法必须返回实例。如果您对创建类的实例不感兴趣,为什么不使用classmethod呢?从设计的角度来看,这不是一个好主意。New应该返回一个新初始化的对象,否则对其他程序员来说是不明显或不直观的。当然,如果没有其他人会看到这段代码,那也没关系。。。直到你在三个月后看到它,并想知道代码中发生了什么。这只是一个练习,是的,我被建议不要在生产中使用它。谢谢你的好把戏!但是我需要SomeClass.new
返回值,而不需要对初始化对象进行额外调用。我会更新问题的。我还是不明白你的问题。您会问“为什么初始化不返回我的值”,但我刚才向您展示了它确实返回了它的值。那么,您的问题到底是什么呢?很抱歉让您感到困惑,实际的问题是“为什么SomeClass.new
不返回我的值”。问题在不久前更新。好吧,这很简单:您没有更改SomeClass.new
,那么它为什么会返回不同的值呢?我只是重新检查了这个问题,它仍然读道:“对Ruby的initialize
方法有点困惑。为什么它不像其他方法那样返回我的值?”除了标题之外,没有提到任何类。新的
。谢谢你的精彩表演!但是我需要SomeClass.new
返回值,而不需要对初始化对象进行额外调用。我会更新问题的。我还是不明白你的问题。您会问“为什么初始化不返回我的值”,但我刚才向您展示了它确实返回了它的值。那么,您的问题到底是什么呢?很抱歉让您感到困惑,实际的问题是“为什么SomeClass.new
不返回我的值”。问题在不久前更新。好吧,这很简单:您没有更改SomeClass.new
,那么它为什么会返回不同的值呢?我只是重新检查了这个问题,它仍然读道:“对Ruby的initialize
方法有点困惑。为什么它不像其他方法那样返回我的值?”除了标题之外,没有提到SomeClass.new
。