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"
" "
vous permet d'effectuer une interpolation de chaîne, par exemple:
world_type = 'Mars'
"Hello #{world_type}"
à 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
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é .
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 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..
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.
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
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')