我无法弄清楚如何创建这种转换,无论数学如何随着我的大脑发出嘎嘎声,都会产生一些关于数学的问题。
我的班级
class Distance
def convert(miles_to_km, km_to_miles)
miles_to_km = 1 * 1.60934
km_to_miles = 1 * 0.621371
end
end
或应该是这样的 班级
def convert(value, unit)
some data i have yet to understand
end
end
我添加的输入
puts "______________Adding: _____________"
d1 = Distance.new(1, "m")
d2 = Distance.new(1, "k")
puts d1 + d2
d1 = Distance.new(2, "M")
d2 = Distance.new(2, "m")
d3 = d1 + d2
puts d3
puts d3.value
puts d3.unit
d1 = Distance.new(3, "k")
d2 = Distance.new(3, "K")
puts d1 + d2
d1 = Distance.new(4, "k")
d2 = Distance.new(4, "m")
puts d1 + d2
puts "-" * 30 ############
结果应该是
______________Adding _____________
1.621371 Miles
4 Miles
4
m
6 Kilometers
10.43736 Kilometers
答案 0 :(得分:2)
您的方法需要特定于您的行为。
def convert(miles_to_km, km_to_miles)
miles_to_km = 1 * 1.60934
km_to_miles = 1 * 0.621371
end
应该是
def convert_miles_to_km(km)
return km * 1.60934
end
反之亦然
答案 1 :(得分:1)
有很多方法可以解决这个问题。很大程度上取决于您希望来自调用者的输入类型,以及您希望作为返回值传回的结果类型。
有时对于表达计量单位的方式不那么严格,同时仍然严格执行转换的方式是有用的。下面是一个示例,其中单个方法将字符串作为输入,并为预定义单位(如公里或英里)返回适当的浮点值,同时保持关于方式表达距离单位的灵活性。 / p>
# Use constants for your conversion ratios.
MI_TO_KM = 1.60934
KM_TO_MI = 0.621371
# Make your method more flexible by accepting a string
# containing both a distance and a unit identifier.
def convert_distance str
dist, unit = str.scan(/([\d.]+)\s*(\S+)/).flatten
case unit
when /^k/i
dist.to_f * KM_TO_MI
when /^m/i
dist.to_f * MI_TO_KM
else
raise ArgumentError, "unknown unit: #{unit.inspect}"
end
end
这将为您提供以下示例输出:
convert_distance '10 miles'
#=> 16.0934
convert_distance '10 kilometers'
#=> 6.21371
convert_distance '3mi'
#=> 4.82802
convert_distance '3km'
#=> 1.8641130000000001
convert_distance '1 cubit'
#=> ArgumentError: unknown unit: "cubit"
这种方法不一定是完成工作的最简单方法,但它肯定会阻止您为“km”,“km”,“klicks”等定义不同的方法。只需在case语句中添加一个具有适当转换率的新子句,它也可以轻松扩展到其他距离单位(例如“码”)。