我被困在二档,请查看我的代码并给我一些意见。谢谢。
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
Rspec的:
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 :(得分: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