0

我被困在二档,请检查我的代码并给我一些意见。谢谢你。

class Timer
    def initialize(seconds = 0,time_string = "00:00:00")
        @seconds = seconds
        @time_string = time_string

    end

    def seconds=(new_sec)
        @seconds = new_sec
    end

    def seconds
        @seconds
    end

    def time_string=(new_time)

        hh = seconds/3600
        mm = seconds%3600/60
        ss = seconds%60
        new_time = "#{hh}:#{mm}:#{ss}" 
        @time_string = new_time 
    end

    def time_string
        @time_string
    end
end

规格:

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
4

1 回答 1

0

以下是一个作业def time_string=(new_time),但您实际上并没有使用 new_time 来更改任何东西的值,所以最好说def time_string只定义一个 getter。(您的测试并不表明您希望能够通过提供的 time_string 设置时间。)

正如 Neil Slater 指出的那样,您不需要实例变量 @time_string,只需从 time_string 方法返回 new_time,您就拥有了您想要的。所以你的代码...

def time_string=(new_time)

        hh = seconds/3600
        mm = seconds%3600/60
        ss = seconds%60
        new_time = "#{hh}:#{mm}:#{ss}" 
        @time_string = new_time 
    end

用。。。来代替

def time_string
  hh = @seconds/3600
  mm = @seconds%3600/60
  ss = @seconds%60
  new_time = "#{hh}:#{mm}:#{ss}" 
end
于 2013-07-07T12:03:21.033 回答