Все в рубине - это объект, и даже умножения - это просто вызовы методов.
"Hello" * 2
такая же, как "Hello".*(2)
Итак, когда вы получите сообщение об ошибке, вы должны спросить себя: Есть ли левая рука действительно есть метод умножения и он будет принимать на правую сторону в качестве аргумента?
digicollect = []
digicollect[0] = 2
Давайте проверим, какие объекты мы имеем:
p digicollect.class #=> Array
p digicollect[0].class #=> Fixnum
p 2.class #=> Fixnum
p "Hello".class #=> String
Теперь, если мы идем в Документах для * -метода мы находим, что каждый класс ожидать:
http://ruby-doc.org/core-2.1.0/String.html#method-i-2A
http://ruby-doc.org/core-2.1.0/Array.html#method-i-2A
http://ruby-doc.org/core-2.1.0/Fixnum.html#method-i-2A
Там мы найдем, что будет:
- String ex pect Integer. (несколько раз для повторения строки)
- Array ожидает целое число или строку.(повторить массив x раз или присоединиться к строке)
- Fixnum ожидает цифровую. (Для простого умножения)
Таким образом, когда вы пишете "hello" * digicollect
вы пытаетесь вызвать метод умножения жала и передать его массив, а метод просто не знает, как справиться с этим (он будет принимать только целые числа), поэтому вы получаете ошибку.
отсутствует очень важный тег. какую технологию вы используете? – Sachin
Я использую командную строку и irb внутри нее. ruby version 2.0 – maudulus