Когда я ввожу это:
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
понимает, как обрабатывать целые числа. Он отвечает, объединяя несколько своих копий вместе.
Но когда вы выполняете 3 * "repeat"
, он вызывает *
в Fixnum
с аргументом String
. Это не работает, потому что метод *
Fixnum
ожидает увидеть другой числовой тип.