Почему `"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 * метод ожидает увидеть другой числовой тип.

Другие вопросы по тегам