Почему `“repeat” * 3` не совпадает с `3 * “repeat”` в Ruby?
-
23-09-2019 - |
Вопрос
Когда я печатаю это:
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 *
метод ожидает увидеть другой числовой тип.
Не связан с StackOverflow