string + e <<
|
|
Acabei de ver algo que não gostei muito no ruby, até porque ele era o responsável por um bug no meu código. para minha surpresa, o operador << modificou a string que estava em nome (como de se esperar) mas também modificou a string em outro, o que na minha opinição quebra totalmente o conceito da “menor surpresa”.
Agora veja que f*** seria achar o bug no seguinte código: Imagina um código deste em um framework como Rails? O que vcs acham? |
|
|
Não há nada de errado Neves. O efeito do método to_s numa string é sempre retornar ‘self’ e não uma cópia. Se quer uma nova cópia(nova referência) use, o método dup. |
|
|
Provavelmente você está esquecendo que “isso” é um objeto, então se obj1 = obj2, os dois são o mesmo, apenas sendo duas referências para o mesmo objeto. entendeu? |
|
|
realmente é isto que confunde, pois não me lembro de ter visto string ser tratada como objeto em nenhuma outra linguagem. |
|
|
Isso porque nessas linguagens a string é imutável e é copiada quando você faz atribuição. Existem vantagens e desvantagens a isso. Java usa string imutáveis com operação de copy-on-write, então cada variável ganha uma nova instância copiada do string original. Em Ruby, String é mais um objeto e é passada a referência do objeto na atribuição. Apenas aprenda a semântica. Não existe um jeito “melhor” do que o outro. Se quiser deixar seu String “um pouco” imutável, chame o método freeze nele: s = “teste”.freeze |

