如何在Ruby中使用具有度量单位的值?

时间:2012-02-21 00:23:30

标签: ruby

使用的好方法是什么? Ruby的温度没有混淆使用的测量单位?

是否有一种普遍接受的方法来处理这个问题?

语法是什么,以便最有意义且易于阅读?

传达给定功能所期望的单位或如何确保其获得正确的单位的最佳方式是什么?

5 个答案:

答案 0 :(得分:0)

长期的答案是为温度创建一个类,然后将其子类化为Ferienheit,Celcius和Kelvin。让他们都实现一个函数,在一个或另一个中返回它们的值。

因此,如果你想让你的系统基于Ferienheit,你可以让他们都实现一个toFerienheit方法,然后无论你采取什么类型的测量,你总会有方法让他们回到一个可用的温度。

对于这种模糊的问题,我能做的最好。

答案 1 :(得分:0)

最终,如果您要求用户在应用程序的某个时刻输入温度,那么您也必须向他们询问单位。您不能依赖它们总是在C / F / K中输入正确的值/无论您决定使用什么。

在后台,您可以执行已建议的操作,并传递温度对象,这些对象可以在任何单位返回温度,或者更加努力地使用单个单位并在变量命名中更明确:

def jacket_needed?(celcius)
  celcius < 10
end

答案 2 :(得分:0)

我不知道一种普遍接受的方法,但我会创建一个类来处理每个度量。例如:

class Temperature
  def initialize value, unit = :K
    # convert the value into a internal unit, e.g. Kelvin,
    # to store internally
  end
  def value unit = :K
    # convert the value to the desired unit and return it.
  end
end

class Length
  def initialize value, unit = :m
    #...
  end
  #...
end

class TimeLength
  def initialize value, unit = :s
    #...
  end
  #...
end

答案 3 :(得分:0)

我找到了以下两个提供我搜索内容的宝石:

两种宝石都提供了一种创建单位并使用它们的方法(也就是繁殖,添加等)。这样一个函数可以检查它是否有一个单元,并且这种方式以正确的测量单位执行其操作。

答案 4 :(得分:0)

我已经实现了一个处理单位转换和数学的宝石 - Unitwise。它基于统一的度量单位代码(UCUM),这是一种代表计算机科学单位的标准。 Unitwise可以对许多单位进行量化,转换和执行数学,包括温度:

require 'unitwise'

temp = 22.convert_to('degree Celsius') 
# => #<Unitwise::Measurement 22 degree Celsius>

temp.convert_to("degree Fahrenheit")
# => #<Unitwise::Measurement 71.59999999999997 degree Fahrenheit>

它还支持Kelvin和Rankine温标。