Вопрос

Когда я печатаю это:

puts 'repeat' * 3

Я получаю:

>> repeat repeat repeat

Но это не сработает, если я сделаю это:

puts 3 * 'repeat'

Почему?

Это было полезно?

Решение

В Ruby, когда вы вызываете a * b, вы на самом деле вызываете метод , называемый * на a.Попробуйте это, например:

a = 5
=> 5
b = 6
=> 6
a.*(b)
=> 30

c = "hello"
=> "hello"
c.*(a)
=> "hellohellohellohellohello"

Таким образом <String> * <Fixnum> работает нормально, потому что * способ на String понимает, как обрабатывать целые числа.Он реагирует, объединяя несколько своих копий вместе.

Но когда ты делаешь 3 * "repeat", это вызывает * на Fixnum с помощью String аргумент.Это не работает, потому что Fixnum's * метод ожидает увидеть другой числовой тип.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top