Por que "" repetir " * 3` o mesmo que` 3 * “repetir” `em rubi?
-
23-09-2019 - |
Pergunta
Quando eu digito isso:
puts 'repeat' * 3
Eu recebo:
>> repeat repeat repeat
Mas não está funcionando se eu fizer isso:
puts 3 * 'repeat'
Por quê?
Solução
Em Ruby, quando você liga a * b
, você está realmente chamando um método chamado *
sobre a
. Experimente isso, por exemplo:
a = 5
=> 5
b = 6
=> 6
a.*(b)
=> 30
c = "hello"
=> "hello"
c.*(a)
=> "hellohellohellohellohello"
Desta forma <String> * <Fixnum>
funciona bem, porque o *
método em String
Entende como lidar com números inteiros. Ele responde concatenando uma série de cópias de si juntos.
Mas quando você faz 3 * "repeat"
, está invocando *
sobre Fixnum
com um String
argumento. Isso não funciona, porque Fixnum
's *
O método espera ver outro tipo numérico.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow