Использование 'array.each {| x | ставит x} ', чтобы нарисовать гистограмму из нескольких символов "-", выдает ошибку TypeError - PullRequest
0 голосов
/ 16 января 2019
graph_nums.each {|x| puts "-" * x}

graph_nums - это массив чисел, и я пытаюсь представить каждое число кратным «-», например, 3 будет "---".

i = 3
graph_nums.each {|x| puts "-" * i}

и

graph_nums.each {|x| puts "-" * 3}

Оба ведут себя как положено. И

graph_nums.each {|x| puts x}

Возвращает числа, но объединение этих идей приводит к ошибке.

graph_nums.each {|x| puts "-" * graph_nums[0]}

или

graph_nums.each {|x| puts "-" * x}

`* ': неявное преобразование строки в целое число (TypeError)

Для массива чисел 1-6 я бы ожидал увидеть

-
--
---
----
-----
------

Почему работает один или другой, но не оба? Есть ли решение, использующее этот формат, или мне нужно пройти долгий путь?

1 Ответ

0 голосов
/ 16 января 2019

Решение, которое вы разместили, работает:

[4] pry(main)> graph_nums = [1,2,3,4,5,6]
=> [1, 2, 3, 4, 5, 6]
[5] pry(main)> graph_nums.each {|x| puts "-" * x}
-
--
---
----
-----
------
=> [1, 2, 3, 4, 5, 6]

Скорее всего graph_nums - это массив строк. Вы можете преобразовать их в целые числа, используя String#to_i:

[6] pry(main)> graph_nums = ['1','2','3','4','5','6']
=> ["1", "2", "3", "4", "5", "6"]
[7] pry(main)> graph_nums.each {|x| puts "-" * x}
TypeError: no implicit conversion of String into Integer
from (pry):7:in `*'
[8] pry(main)> graph_nums.each {|x| puts "-" * x.to_i}
-
--
---
----
-----
------
=> ["1", "2", "3", "4", "5", "6"]
...