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

但我不明白 Rspec 的返回错误消息,上面写着“计时器应该初始化为 0 秒”,我一开始就卡在我的代码上,非常感谢任何能解释下面我的代码有什么问题的人。谢谢。

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

Stefan 的回答很好,但我使用了下面的代码,它非常适合您正在处理的其余问题。

class Timer
  attr_accessor :seconds

  def initialize
    @seconds = 0
  end
end

attr_accessor 创建实例变量@seconds,并将其初始化为0。不过,我不能相信这个答案。我在这个 stackoverflow 页面上找到了它及其非常详尽的解释:什么是 attr_accessor in Ruby?

所以谢谢哈库宁。

于 2014-01-27T17:05:24.403 回答
0

试图以最“懒惰”的方式解决这个问题。测试工作正常,但我认为必须有简短且优化的方法来解决它。

class Timer
      attr_accessor  :seconds
  def initialize seconds=0
      @seconds = seconds
  end
  def time_string
      res=[]
      tt=@seconds.div(3600)
      if tt<10
         tt = '0' + tt.to_s
      end
      res.push(tt)
      tt=(@seconds-@seconds.div(3600)*3600).div(60)
      if tt<10
         tt = '0' + tt.to_s
      end
         res.push(tt)
         tt=@seconds-@seconds.div(3600)*3600-((@seconds-@seconds.div(3600)*3600).div(60))*60
      if tt<10
         tt = '0' + tt.to_s
      end
  res.push(tt)
  res.join(':')
  end
end
于 2014-07-12T00:52:02.117 回答