Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何使`SomeClass.new`返回计算值而不是创建的对象_Ruby - Fatal编程技术网

Ruby 如何使`SomeClass.new`返回计算值而不是创建的对象

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

对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
  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