0

我无法弄清楚如何创建这种转换,关于数学的一些东西,无论它多么微小,都会让我的大脑感到不安。

我的课

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
4

2 回答 2

3

您的方法需要特定于您的操作。

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

反之亦然

于 2013-11-13T00:52:58.663 回答
1

解析字符串参数以提高灵活性

有很多方法可以解决这个问题。很大程度上取决于您期望调用者提供什么样的输入,以及您希望将什么样的结果作为返回值传回。

有时,对如何表达度量单位不那么严格,同时对执行转换的方式保持严格是很有用的。这是一个示例,其中单个方法将字符串作为输入,并为预定义的单位(例如公里或英里)返回适当的浮点值,同时对距离单位的表示方式保持灵活。

# 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”、“kilometers”、“klicks”等定义不同的方法。它也很容易扩展到其他距离单位(例如“码”),只需在 case 语句中添加一个具有适当转换比率的新子句。

于 2013-11-13T03:23:04.477 回答