Eu estava lendo a documentação do Ruby e fiquei confuso com a diferença entre gsube tr. Qual é a diferença entre os dois?
Eu estava lendo a documentação do Ruby e fiquei confuso com a diferença entre gsube tr. Qual é a diferença entre os dois?
Respostas:
Use trquando desejar substituir (traduzir) caracteres únicos.
trcorresponde a caracteres únicos (não por meio de uma expressão regular), portanto, os caracteres não precisam ocorrer na mesma ordem no argumento da primeira string. Quando um caractere é encontrado, ele é substituído pelo caractere encontrado no mesmo índice no segundo argumento da string:
'abcde'.tr('bda', '123')
#=> "31c2e"
'abcde'.tr('bcd', '123')
#=> "a123e"
Use gsubquando precisar usar uma expressão regular ou quando desejar substituir substrings mais longos:
'abcde'.gsub(/bda/, '123')
#=> "abcde"
'abcde'.gsub(/b.d/, '123')
#=> "a123e"
trsignifica "traduzir", como em "traduzir caracteres", que é exatamente o que faz. É nomeado após o utilitário Unix com o mesmo nome (que é bem conhecido por seus nomes obscuros e abreviados).
trsó pode substituir um único caractere por um único caractere fixo (embora você possa colocar várias correspondências desse tipo em uma única trchamada), mas é rápido.gsubpode corresponder a padrões complicados usando regex e substituir por um resultado de computação complicado, mas é mais lento que tr.trsão várias vezes mais rápidos que gsub. Aqui está uma referência de quão rápido trpoderia ser do que gsub. github.com/JuanitoFatas/fast-ruby/blob/master/code/string/…
trretorna uma cópia de strcom os caracteres from_strsubstituídos pelos caracteres correspondentes em to_str. Se to_strfor menor que from_str, será preenchido com seu último caractere para manter a correspondência.
http://apidock.com/ruby/String/tr
gsubretorna uma cópia de strcom todas as ocorrências de padrão substituídas pelo segundo argumento. O padrão é tipicamente um Regexp; se dado como uma String, qualquer metacaractere de expressão regular que ele contém será interpretado literalmente, por exemplo \d, corresponderá a uma folga seguida por d, em vez de um dígito.
http://apidock.com/ruby/String/gsub