-1

私の準備作業は、配列拡張ファイルを作成し、それにいくつかのメソッドを追加するように求めています。これは彼らが私にくれたものです:

describe Array do

  describe "#sum" do
    it "has a #sum method" do
      [].should respond_to(:sum)
    end

    it "should be 0 for an empty array" do
      [].sum.should == 0
    end

    it "should add all of the elements" do
      [1,2,4].sum.should == 7
    end
  end
end

だから私はこれを書いた:

class Array
    def sum(array = [])
        add = 0
        if array == []
            array = add
      else
            while array.length > 0
            add = add + array.last
            array.pop
            end
            array = add
        end
        array
    end

end

このエラーが発生し続けます:

Array   #sum
    has a #sum method
    should be 0 for an empty array
    should add all of the elements (FAILED - 1)

Failures:

  1) Array#sum should add all of the elements
     Failure/Error: [1,2,4].sum.should == 7
       expected: 7
            got: 0 (using ==)
     # ./14_array_extensions/array_extensions_spec.rb:23:in `block (3 levels) in <top (required)>'

Finished in 0.00241 seconds 3 examples, 1 failure

御時間ありがとうございます。

4

2 に答える 2

3

拡張とは、配列を渡すのではなく、Array使用する必要があることを意味します。現在、呼び出されselfた配列ではなく、空の配列 (デフォルト パラメーターから) を合計しています。#sum

于 2013-08-12T23:46:26.953 に答える
0

http://www.runtime-era.com/2012/12/reopen-and-modify-ruby-classes-monkey . html

以下に貼り付けたセクションを次に示します。

再開して任意のクラスに追加

この種の変更は、Ruby の任意のクラスに対して行うことができます。これには、Gem とコア Ruby クラスが含まれます。配列内の要素を (素朴に) 合計できるようにしたいとしましょう。

[1,2,3,4].sum

#undefined method `sum' for [1, 2, 3, 4]:Array (NoMethodError)

class Array

  def sum
    sum = 0
    self.each do |e|
        sum += e
    end
    sum
  end
end

[1,2,3,4].sum

#10

于 2014-08-04T00:52:00.650 に答える