Почему не '“повторение” * 3' то же как '3 * “повторение”' в Ruby?

Когда я ввожу это:

puts 'repeat' * 3

Я добираюсь:

>> repeat repeat repeat

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

puts 3 * 'repeat'

Почему?

8
задан John Feminella 6 April 2010 в 01:29
поделиться

1 ответ

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

28
ответ дан 5 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: