类和实例方法都是通过测试调用的,我怎么能“合并”它们呢?

时间:2014-10-02 19:13:58

标签: ruby

我从练习中坚持了这个练习。

sum_of_multiples_test.rb

的一部分
...
  def test_sum_to_1000
    skip
    assert_equal 233168, SumOfMultiples.to(1000)
  end

  def test_configurable_7_13_17_to_20
    assert_equal 51, SumOfMultiples.new(7, 13, 17).to(20)
  end
...

sum.rb

class SumOfMultiples
  def initialize(*args)
    @args = args ||= [3,5]
  end

  def to(max)
    ary = []
    return 0 if max < 2
    @args.each do |m|
      for i in 0..max-1
        ary << i if i % m == 0
      end
    end
    ary.uniq!.inject(:+)
  end
end

如果我使用类方法self.to,它不能看到我的实例变量@args,如果我使用 实例方法&#34; def to&#34;第一次测试没有通过。有没有办法以某种方式&#34;合并&#34;既?

1 个答案:

答案 0 :(得分:0)

为您的班级添加另一种方法:

def self.to(max)
  new.to(max)
end

您现在可以调用其中的每一个,结果将是相同的:

SumOfMultiples.to(1000)
SumOfMultiples.new.to(1000)