Double vs simples citations

Je suis vraiment nouveau pour Ruby et j’essaie de comprendre s’il y a un moment précis où je devrais utiliser "" vs '' .

J’ai utilisé des citations simples la plupart du temps parce que c’est plus facile à taper, mais je ne sais pas si je devrais le faire.

par exemple, get 'user/new' vs get "user/new"

" " vous permet de faire une interpolation de chaîne, par exemple:

 world_type = 'Mars' "Hello #{world_type}" 

sauf l’interpolation, une autre différence est que “séquence d’échappement” ne fonctionne pas en guillemet simple

 puts 'a\nb' # just print a\nb puts "a\nb" # print a, then b at newline 

Pour répondre à votre question, vous devez utiliser "" pour effectuer une interpolation de chaîne:

 a = 2 puts "#{a}" 

Utilisez des citations simples autrement.

Aussi, si vous vous demandez s’il existe une différence en termes de performances, il existe une excellente question à ce sujet sur StackOverflow.

Et si vous êtes vraiment nouveau à RoR, je vous invite à prendre un bon livre Ruby pour apprendre les bases de la langue. Cela vous aidera à comprendre ce que vous faites (et vous empêchera de penser que Rails est magique). Je recommande personnellement le Rubyist bien fondé .

Il y a une différence entre '' guillemets simples et les guillemets doubles dans Ruby en termes de ce qui peut être évalué en tant que chaîne.

Au départ, je voudrais clarifier que dans la forme littérale d’une chaîne, tout ce qui se trouve entre des guillemets simples ou doubles est évalué comme un object chaîne, ce qui est une instance de la classe Ruby Ssortingng.

Par conséquent, 'stackoverflow' et "stackoverflow" évalueront les instances de la classe Ssortingng sans aucune différence .

La différence

La différence essentielle entre les deux formes littérales de chaînes (guillemets simples ou doubles) est que les guillemets doubles permettent des séquences d’échappement alors que les guillemets simples ne le font pas!

Un littéral de chaîne créé par des guillemets simples ne prend pas en charge l’ interpollation de chaîne et n’échappe pas aux séquences.

Un exemple intéressant est:

 "\n" # will be interpreted as a new line 

tandis que

 '\n' # will display the actual escape sequence to the user 

Interpoler avec des guillemets simples ne fonctionne pas du tout:

 '#{Time.now}' => "\#{Time.now}" # which is not what you want.. 

Meilleur entrainement

Comme la plupart des Ruby Linters suggèrent d’ utiliser des littéraux de guillemets simples pour vos chaînes et de choisir les doubles dans le cas de séquences d’interpolation / d’échappement.

Les chaînes entre guillemets simples ne traitent pas les codes d’échappement ASCII (\ n, \ t, etc.) et ne font pas d’interpolation de chaîne, alors que les guillemets doubles font les deux.

Exemple de code d’échappement:

 2.4.0 :004 > puts 'Hello \n World' Hello \n World 2.4.0 :005 > puts "Hello \n World" Hello World 

Exemple d’interpolation:

 2.4.0 :008 > age=27 => 27 2.4.0 :009 > puts 'Age: #{age}' Age: #{age} 2.4.0 :009 > puts "Age: #{age}" Age: 27 

Semblable à la réponse “\ n” en impression, voici un autre cas de différence

 puts "\1" -> get special character puts '\1' -> get \1 

Il semble donc que * était converti en caractère échappé entre guillemets, mais pas entre guillemets simples. BTW, cela aura un impact sur la sortie lors de l’utilisation dans une expression régulière, par exemple, str.gsub (/ expression régulière /, ‘\ 1, \ 2’)

Dans ce cas précis, la manière dont vous écrivez ne fait aucune différence. Ils sont équivalents. En outre, vous voudrez peut-être lire d’autres guides / tutoriels Ruby 🙂