1

私は Ruby の初心者で、次の Rspec でクラス Timer を作成しようとしています。

require 'timer'

describe "Timer" do
  before(:each) do
    @timer = Timer.new
  end

  it "should initialize to 0 seconds" do
    @timer.seconds.should == 0
  end

  describe 'time_string' do
    it "should display 0 seconds as 00:00:00" do
      @timer.seconds = 0
      @timer.time_string.should == "00:00:00"
    end

    it "should display 12 seconds as 00:00:12" do
      @timer.seconds = 12
      @timer.time_string.should == "00:00:12"
    end

    it "should display 66 seconds as 00:01:06" do
      @timer.seconds = 66
      @timer.time_string.should == "00:01:06"
    end

    it "should display 4000 seconds as 01:06:40" do
      @timer.seconds = 4000
      @timer.time_string.should == "01:06:40"
    end
  end

しかし、「タイマーは 0 秒に初期化する必要があります」という Rspec の戻りエラー メッセージを理解できません。自分のコードの最初で立ち往生しており、以下のコードの何が問題なのかを説明できる人に本当に感謝しています。ありがとう。

class Timer
    def intialize(seconds)
        @seconds = seconds
    end
    def seconds=(new_seconds = 0)
        @seconds = new_seconds
    end
    def seconds
        @seconds
    end
end
4

3 に答える 3

2

あなたのinitializeメソッドはオプションの引数を取るべきだと思います:

class Timer
  def initialize(seconds = 0)
    @seconds = seconds
  end
  def seconds=(new_seconds)
    @seconds = new_seconds
  end
end
于 2013-07-03T19:19:32.670 に答える
1

ステファンの答えは良いですが、私は以下のコードを使用しました。それはあなたが取り組んでいる残りの問題に対して完全に機能します。

class Timer
  attr_accessor :seconds

  def initialize
    @seconds = 0
  end
end

attr_accessor はインスタンス変数 @seconds を作成し、0 に初期化されます。ただし、この回答を信用することはできません。このstackoverflowページでそれとその非常に完全な説明を見つけました:What is attr_accessor in Ruby?

それでは、はくにんさん、ありがとうございます。

于 2014-01-27T17:05:24.403 に答える