Quelle est la différence entre tr et gsub?

Je lisais la documentation de Ruby et je gsub confondu avec la différence entre gsub et tr . Quelle est la différence entre les deux?

Utilisez tr lorsque vous souhaitez remplacer (traduire) des caractères uniques.

tr correspond à des caractères uniques (pas via une expression régulière), par conséquent, les caractères ne doivent pas nécessairement apparaître dans le même ordre dans le premier argument. Lorsqu’un caractère est trouvé, il est remplacé par le caractère trouvé au même index dans le second argument:

 'abcde'.tr('bda', '123') #=> "31c2e" 'abcde'.tr('bcd', '123') #=> "a123e" 

Utilisez gsub lorsque vous devez utiliser une expression régulière ou lorsque vous souhaitez remplacer des sous-chaînes plus longues:

 'abcde'.gsub(/bda/, '123') #=> "abcde" 'abcde'.gsub(/bd/, '123') #=> "a123e" 
  • tr ne peut remplacer qu’un seul caractère avec un seul caractère fixe (bien que vous puissiez placer plusieurs correspondances de ce type dans un seul appel) mais est rapide.
  • gsub peut correspondre à des motifs compliqués en utilisant regex, et remplacer par un résultat de calcul compliqué, mais est plus lent que tr .

tr renvoie une copie de str avec les caractères de from_str remplacés par les caractères correspondants dans to_str . Si to_str est plus court que from_str , il est from_str avec son dernier caractère afin de maintenir la correspondance. http://apidock.com/ruby/Ssortingng/tr

gsub renvoie une copie de str avec toutes les occurrences du motif substitué au second argument. Le modèle est généralement un Regexp; Si elle est donnée en tant que chaîne, les métacaractères d’une expression régulière qu’elle contient seront interprétés littéralement, par exemple \d correspondra à un retour en arrière suivi d’un d au lieu d’un chiffre. http://apidock.com/ruby/Ssortingng/gsub