Oi Pedro, tudo bem? Pelo que entendi, é a forma como o puts imprime a interpolação do objeto dentro da string.
1 - Quando você imprime diretamente a variável, ele usa o método to_s
do objeto, que a implementação é: imprimir os valores do vetor.
Quando você interpola, aparementemente, o método usado é o inspect
do objeto, por isso aparece os colchetes que representam o vetor.
2 - Justo por que a quebra de linha é um caracter universal, assim como a volta para o começo da linha, representado por \n\r
, que não é impresso no terminal, mas é interpretado.