0

所以我正在尝试编写一些代码来使 Ruby 的 RSPEC 测试通过。但是我什至无法通过第一个测试。我想如果我能在这方面得到一点帮助,我就能得到剩下的。但如果这样更容易提供建议,我可以发布其余的测试。

所以它正在构建一个华氏/摄氏度转换器,但使用对象和类而不是仅仅定义几个方法来进行转换。

第一部分看起来像这样

   require "temperature"

describe Temperature do

  describe "can be constructed with an options hash" do
    describe "in degrees fahrenheit" do
      it "at 50 degrees" do
        Temperature.new(:f => 50).in_fahrenheit.should == 50
      end

说明中的一个提示说,温度对象构造函数应该接受带有 :celsius 或 :fahrenheit 条目的选项散列。

任何帮助或提示将不胜感激。在过去的几周里,我一直被困在这个测试中。提前致谢。

4

1 回答 1

1

我认为您的温度课程需要一些工作。为什么不具有可以设置温度对象的基值的“比例”属性?

这是您发布的内容的修改版本:

class Temperature
  attr_accessor :value, :scale
  def initialize(value, options={})
    @value = value
    if options.has_key?(:scale)
      @scale = options[:scale]
    else
      @scale = :c
    end
  end
  def in_fahrenheit()
    if @scale == :c
      ( @value * 9.0/5.0 ) + 32.0 
    else
      @value
    end
  end 
end

调用#in_fahrenheit 时无需创建新的温度对象。您可以使当前对象将数字(存储在属性中)转换为华氏温度。您可以在创建对象时添加温度信息:

t1=Temperature.new(68, :scale =>:f)
t2=Temperature.new(0)

2.0.0dev :199 > t1.in_fahrenheit  => 68 
2.0.0dev :200 > t2.in_fahrenheit  => 32.0 
于 2013-03-01T16:58:36.050 回答