我有几个ruby函数,想要检查输入是否正确以及输入是否有意义。什么是明智的方法呢?
以下是我拥有的一个功能以及我想要检查的内容的示例
# Converts civil time to solar time
# civilT: Time object
# longitude: float
# timezone: fixnum
def to_solarT(civilT,longitude,timezone)
# pseudo code to check that input is correct
assert(civilT.class == Time.new(2013,1,1).class)
assert(longitude.class == 8.0.class)
assert(timezone.class == 1.class)
# More pseudocode to check if the inputs makes sense, in this case
# whether the given longitude and timezone inputs make sense or whether
# the timezone relates to say Fiji and the longitude to Scotland. Done
# using the imaginary 'longitude_in_timezone' function
assert(longitude_in_timezone(longitude,timezone))
end
我在这里找到了一个相关的问题:how to put assertions in ruby code。这是方法还是有更好的方法来测试ruby中的函数输入?
答案 0 :(得分:3)
你不应该这样做。 Ruby很大程度上依赖于duck-typing。也就是说,如果它像鸭子一样嘎嘎叫,它就是一只鸭子。即只使用你收到的对象,如果他们确实做出了正确的反应,那就没问题了。如果他们不这样做,你可以拯救NoMethodError并显示相应的输出。
答案 1 :(得分:3)
assert
不是标准的Ruby方法,并且经常被测试框架使用,所以我认为把它放在代码中并不好。此外,创建要检查参数的类的实例是没有意义的。更直截了当,
def to_solarT civilT, longitude, timezone
raise "Argument error blah blah" unless Time === civilT
raise "Argument error blah blah" unless Float === longitude
raise "Argument error blah blah" unless Fixnum === timezone
...
end