Почему `"repeat" * 3` не совпадает с`3 * "repeat"`в Ruby?
Когда я набираю это:
puts 'repeat' * 3
Я получил:
>> repeat repeat repeat
Но это не работает, если я делаю это:
puts 3 * 'repeat'
Зачем?
1 ответ
Решение
В руби, когда звонишь 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 *
метод ожидает увидеть другой числовой тип.