Question

Quand je tape ceci:

puts 'repeat' * 3

Je reçois:

>> repeat repeat repeat

Mais cela ne fonctionne pas si je fais ceci:

puts 3 * 'repeat'

Pourquoi?

Était-ce utile?

La solution

Dans Ruby, lorsque vous appelez a * b, vous appelez en fait une méthode appelée * sur a. Essayez ceci, par exemple:

a = 5
=> 5
b = 6
=> 6
a.*(b)
=> 30

c = "hello"
=> "hello"
c.*(a)
=> "hellohellohellohellohello"

Ainsi fonctionne <String> * <Fixnum> bien, car la méthode * sur String comprend comment gérer des entiers. Il répond par un certain nombre de concaténer copies de lui-même ensemble.

Mais quand vous faites 3 * "repeat", il est l'invocation * sur Fixnum avec un argument String. Cela ne fonctionne pas, parce que la méthode de Fixnum * attend à un autre type numérique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top