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"

134
demandé sur Brickgao 2011-06-18 14:12:44

7 réponses

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

world_type = 'Mars'
"Hello #{world_type}"
167
répondu Jits 2011-06-18 10:22:22

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 
113
répondu lfx_cool 2013-05-17 04:38:59

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é .

37
répondu Amokrane Chentir 2017-05-23 10:31:37

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.

27
répondu aloucas 2016-02-21 22:43:24

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
5
répondu Imran 2018-05-31 07:09:11

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')

3
répondu Bryan Liu 2013-10-30 01:35:10

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:)

-6
répondu Geo 2011-06-18 10:23:05