我应该进行将标准单位转换为公制单位的变量。这是艰难学习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).
我的错误是什么,如何解决?
答案 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