Pourquoi ne pas ` « répéter » * 3` le même que` 3 * « répéter » `en Ruby?
-
23-09-2019 - |
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?
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