web-dev-qa-db-fra.com

Guillemets simples vs simples

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

J'ai utilisé des guillemets simples la plupart du temps car il est plus facile de taper mais je ne sais pas si je devrais le faire.

par exemple. get 'user/new' contre get "user/new"

156
imjp

" " vous permet d'effectuer une interpolation de chaîne, par exemple:

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

à l'exception de l'interpolation, une autre différence est que la "séquence d'échappement" ne fonctionne pas entre guillemets

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

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

a = 2
puts "#{a}"

Utilisez des citations simples sinon.

De plus, si vous vous demandez s’il existe une différence de performances, il existe un excellent question à ce sujet sur StackOverflow.

Et si vous êtes vraiment nouveau sur RoR, je vous exhorte à choisir un livre décent Ruby pour apprendre les rudiments du langage. Il vous aidera à comprendre ce que vous faites (et vous gardera de penser que Rails est magique). Je recommande personnellement le Rubyist bien ancré .

38
Amokrane Chentir

Il y a une différence entre single '' et des guillemets "" in Ruby pour ce qui est évalué à une chaîne.

Dans un premier temps, je voudrais préciser que dans la forme littérale d'une chaîne tout ce qui se situe entre simple ou double guillemets est évalué en tant qu'objet chaîne, qui est une instance de la classe Ruby String.

Donc, 'stackoverflow' et "stackoverflow" _ les deux évalueront les instances de la classe String 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, contrairement aux guillemets simples!

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

Un bel exemple 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 le suggèrent la plupart des Ruby Linters tilisez des littéraux avec guillemets simples pour vos chaînes et , optez pour les doubles dans le cas d'une interpolation/séquences d'échappement.

29
aloucas

Les chaînes entre guillemets simples ne traitent pas ASCII (\ n,\t etc.), et elles ne font pas d'interpolation de chaînes tandis que les guillemets doubles font les deux choses.

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
6
Imran

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

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

on dirait que * a été 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')

3
Bryan Liu