1

如何干燥以下代码并从第二个调用第一个初始化程序?

class DataStream

  attr_reader :asset
  attr_reader :data

  def initialize(asset)
    @asset = asset
    @data = Array.new
  end

  def initialize(asset, values)
    @asset = asset
    @data = Array.new
    values.each do |value|
      add_value(value)
    end
  end

end
4

4 回答 4

3

你不能定义两个同名的方法,如果你这样做了,只会发生最后一个,就像重新定义方法一样。

您可以使用可选参数,例如:

def initialize(asset, values = nil)
    @asset = asset
    @data = Array.new
    values.each do |value|
        add_value(value)
    end if values
end
于 2012-06-21T05:45:10.167 回答
2

使用默认参数:

def initialize(asset, values = [])
  @asset = asset
  @data = Array.new
  values.each do |value|
    add_value(value)
  end
end
于 2012-06-21T05:46:39.243 回答
1

怎么样 :

class DataStream
  attr_reader :asset
  attr_reader :data
  def initialize(asset, values=nil)
    @asset=asset
    @data = Array.new
    values.each{|v| add_value(v)} unless values.nil?
  end
end
于 2012-06-21T05:47:11.140 回答
1

如果你使用警告,Ruby 会告诉你重新定义了一个现有的方法,因此不能再使用它:

$VERBOSE = true
class DataStream

  attr_reader :asset
  attr_reader :data

  def initialize(asset)
    @asset = asset
    @data = Array.new
  end

  def initialize(asset, values)
    @asset = asset
    @data = Array.new
    values.each do |value|
      add_value(value)
    end
  end
end

(irb):12: warning: method redefined; discarding old initialize
(irb):7: warning: previous definition of initialize was here
于 2012-06-21T06:22:19.403 回答