Guillemets doubles et guillemets simples
Je suis vraiment nouveau pour Ruby et j'essaye de comprendre s'il y a un moment spécifique où je devrais utiliser ""
vs ''
.
j'ai utilisé des guillemets la plupart du temps parce que c'est plus facile à taper mais je ne suis pas sûr si je devrais.
p.ex. get 'user/new'
vs get "user/new"
7 réponses
" "
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 "escape sequence" ne fonctionne pas en une seule citation
puts 'a\nb' # just print a\nb
puts "a\nb" # print a, then b at newline
pour répondre à votre question, vous devez utiliser ""
quand vous voulez faire l'interpolation de chaîne de caractères:
a = 2
puts "#{a}"
utilisez des guillemets simples autrement.
aussi si vous vous demandez s'il y a une différence en termes de performance, Il ya une excellente question à ce sujet sur StackOverflow.
et si vous êtes vraiment nouveau à RoR, je vous exhorte à prendre un livre de rubis décent pour apprendre le bases de la langue. Cela vous aidera à comprendre ce que vous faites (et vous empêchera de penser que les Rails sont magiques). Je recommande personnellement le Rubyiste bien fondé .
il y a une différence entre ''
simple et ""
double guillemets dans Ruby en termes de ce qui doit être évalué à une chaîne.
initialement, je tiens à préciser que dans la forme littérale d'une chaîne de caractères tout ce qui se trouve entre simple ou double les guillemets sont évalués comme un objet de chaîne de caractères, qui est une instance de la classe Ruby String.
Par conséquent, 'stackoverflow'
et "stackoverflow"
évalueront toutes deux les instances de la classe de chaîne sans aucune différence .
la différence
la différence essentielle entre les deux formes littérales de cordes (guillemets simples ou doubles) est que les guillemets doubles permettent des séquences d'échappement alors que les guillemets simples ne le font pas!
une chaîne de caractères littérale créée par les guillemets simples ne supportent pas l'interpolation de chaîne et n'échappent pas aux séquences.
un bon exemple est:
"\n" # will be interpreted as a new line
attendu que
'\n' # will display the actual escape sequence to the user
interpoler avec des citations simples ne fonctionne pas du tout:
'#{Time.now}'
=> "\#{Time.now}" # which is not what you want..
meilleure pratique
comme la plupart des Linters de Ruby suggèrent utiliser des citations simples littérales pour vos cordes et vont pour les doubles dans le cas des séquences d'interpolation/évasion.
une chaîne simple-cité ne traite pas les codes d'échappement ASCII (\n, \t etc), et ils ne faites pas d'interpolation de chaîne alors qu'une double citation fait les deux.
code d'Échappement exemple:
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
similaire à la réponse "\n "en impression, voici un autre cas de la différence
puts "" -> get special character
puts '' -> get
regarde donc comme * a convertir à caractère d'échappement dans les guillemets, mais pas dans des guillemets simples. BTW, il aura un impact sur la sortie lors de l'utilisation dans l'expression régulière par exemple, Str.gsub (/expression régulière/, '\1,\2')
dans ce cas précis, la façon dont vous l'écrivez ne fait aucune différence. Ils sont équivalents. Aussi, vous pouvez vouloir lire plus de Ruby guides/tutoriels:)