Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何将英里转换为公里,反之亦然?_Ruby - Fatal编程技术网

Ruby 如何将英里转换为公里,反之亦然?

Ruby 如何将英里转换为公里,反之亦然?,ruby,Ruby,我不知道如何创造这种转换,数学的一些东西,无论它是多么分钟,都会让我的大脑感到不安 我的班级 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

我不知道如何创造这种转换,数学的一些东西,无论它是多么分钟,都会让我的大脑感到不安

我的班级

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

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

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

反之亦然

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

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
反之亦然

为灵活性分析字符串参数 有很多方法可以解决这个问题。这在很大程度上取决于您希望从调用方获得什么类型的输入,以及希望将什么类型的结果作为返回值传回

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

# 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语句中添加一个具有适当转换率的新子句,就可以轻松地扩展到其他距离单位(例如“码”)。

解析字符串参数以获得灵活性 有很多方法可以解决这个问题。这在很大程度上取决于您希望从调用方获得什么类型的输入,以及希望将什么类型的结果作为返回值传回

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

# 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语句中添加一个具有适当转换率的新子句,就可以轻松地扩展到其他距离单位(例如“码”)。

命名输入英里更合适<代码>定义将公里数转换为公里数更适合命名输入英里数<代码>def将公里数转换为公里数(英里)