Массив не может быть приведен к Float (TypeError) в моем коде Ruby - PullRequest
0 голосов
/ 31 января 2019

Я должен сделать переменные, которые преобразуют стандартные единицы в метрические единицы.Это упражнение к уроку Learn Ruby the Hard Way .Я пытаюсь запустить следующий код в 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 голосов
/ 31 января 2019

Похоже, что ошибка происходит в строке:

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

Проблема здесь использует [] указывает, что программа должна искать объект массива.Использование [] здесь означает, что вы хотите добавить объект массива к объекту с плавающей точкой, используя метод + (операторы - это методы в Ruby).Руби выплевывает это сообщение об ошибке.Кажется, вам нужно:

  • добавить age к (height * cm), чтобы вернуть число с плавающей точкой
  • добавить это значение с плавающей точкой к разнице между (weight * kg_1)и kg_2

Заменив:

[(weight * kg_1) - kg_2]

на

((weight * kg_1) - kg_2)`

, вы должны получить предполагаемое интерполированное значение:

I get 582.96
0 голосов
/ 31 января 2019

Проблема заключается в этой строке:

"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)}."
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...