我的Ruby代码无法将数组强制转换为Float(TypeError)

时间:2019-01-31 16:48:09

标签: ruby

我应该进行将标准单位转换为公制单位的变量。这是艰难学习Ruby 课程的一个练习。我正在尝试在PowerShell中运行以下代码。代码中的信息来自该书的作者。

name = 'Zed A. Shaw'
age = 35 # not a lie in 2009
height = 74 # inches
weight = 180 # lbs
eyes = 'Blue'
teeth = 'White'
hair = 'Brown'
cm = 2.54
kg_1 = 2
kg_2 = 1/10

puts "Let's talk about #{name}."
puts "He's #{height * cm} inches tall."
puts "He's #{(weight * kg_1) - kg_2} pounds heavy."
puts "Actually that's not too heavy."
puts "He's got #{eyes} and #{hair} hair."
puts "His teeth are usually #{teeth} depending on the coffee."

# this line is tricky, try to get it exactly right
puts "If I add #{age}, #{height * cm}, and #{(weight * kg_1) - kg_2 }"
puts "I get #{age + (height * cm) + [(weight * kg_1) - kg_2]}."

当我不得不将所有内容加起来时,它失败了。当我尝试在PowerShell中运行它时,就会出现:

Traceback (most recent call last):
1: from ex5.rb:20:in `<main>'
ex5.rb:20:in `+': Array can't be coerced into Float (TypeError).

我的错误是什么,如何解决?

2 个答案:

答案 0 :(得分:2)

问题出在这一行:

"I get #{age + (height * cm) + [(weight * kg_1) - kg_2]}."

您可能希望看到

I get 1234.12.

您可以使用[]括号对操作进行分组(就像在数学课中一样)。在Ruby中,您只能使用()进行分组。 []是用于引入数组的符号。试试这个:

"I get #{age + (height * cm) + ((weight * kg_1) - kg_2)}."

答案 1 :(得分:0)

看起来错误发生在行上:

puts "I get #{age + (height * cm) + [(weight * kg_1) - kg_2]}."

这里的问题是使用[]表示程序应该在寻找数组对象。通过在此处使用[],可以解释为您正在使用+方法(运算符是Ruby中的方法)将数组对象添加到float对象。 Ruby吐出该错误消息。看来您要执行的操作是:

  • age添加到(height * cm)以返回浮点数
  • 将该浮点值添加到(weight * kg_1)kg_2之间的差异

通过替换:

[(weight * kg_1) - kg_2]

使用

((weight * kg_1) - kg_2)`

您应该收到预期的插值:

I get 582.96