Почему `` repeat "* 3` не совпадает с` 3 * "repeat" `в Ruby? - PullRequest
8 голосов
/ 30 марта 2010

Когда я набираю это:

puts 'repeat' * 3

Я получаю:

>> repeat repeat repeat

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

puts 3 * 'repeat'

Почему?

1 Ответ

28 голосов
/ 30 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...