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ê?

Foi útil?

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
scroll top