380 votes

Concaténation de chaînes et Ruby

Je suis à la recherche d’une façon plus élégante de concaténer des chaînes en Ruby.

J’ai la ligne suivante :

Y a-t-il une façon plus agréable de faire cela ?

Et d’ailleurs, quelle est la différence entre et ?

594voto

Keltia Points 8104

Vous pouvez le faire de plusieurs façons:

  1. Comme vous le montre avec << mais ce n'est pas l' habitude façon
  2. Avec de la ficelle interpolation

    source = "#{ROOT_DIR}/#{project}/App.config"
    
  3. avec +

    source = "#{ROOT_DIR}/" + project + "/App.config"
    

La seconde méthode semble être la plus efficace en terme de mémoire et de vitesse à partir de ce que j'ai vu (pas mesuré). Les méthodes 1 et 3 de jeter un NoMethodError quand ROOT_DIR est nul.

Lorsque vous traitez avec des chemins d'accès, vous pouvez utiliser File.join pour éviter la pagaille avec séparateur de chemin.

À la fin, c'est une question de goût.

102voto

Matt Burke Points 1993

Le `` est le choix de concaténation normal opérateur et est probablement le moyen le plus rapide pour concaténer des chaînes.

La différence entre et qui est modifie l’objet sur son côté gauche, et ne.

79voto

georg Points 1742

Si vous concaténez juste des chemins d’accès, vous pouvez utiliser la méthode File.join propre de Ruby.

11voto

Dejan Simic Points 2634

Puisqu’il s’agit d’un chemin je serais probablement utiliser le tableau et y adhérer :

7voto

tig Points 5567

Je préfère utiliser le nom de Chemin:

require 'pathname' # pathname is in stdlib
Pathname(ROOT_DIR) + project + 'App.config'

à propos de << et + de ruby docs:

+: Retourne une nouvelle Chaîne de caractères contenant other_str concaténé à la str

<<: Concatène l'objet donné à la str. Si l'objet est un Fixnum entre 0 et 255, il est converti à un personnage avant de concaténation.

donc, la différence est dans ce qui devient la première opérande (<< apporte des modifications à la place, + retourne la nouvelle chaîne de sorte qu'il est de la mémoire plus lourd) et ce sera si le premier opérande est Fixnum (<< permettra d'ajouter, comme si c'était de caractère avec code égal à ce nombre, + génère l'erreur)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X