197

""vsを使うべき特定の時期はあり''ますか?

入力が簡単なため、ほとんどの場合一重引用符を使用していますが、そうすべきかどうかはわかりません。

例:get 'user/new'対。get "user/new"

4

8 に答える 8

219

" "文字列補間を行うことができます。例:

world_type = 'Mars'
"Hello #{world_type}"
于 2011-06-18T10:22:22.407 に答える
148

補間を除いて、もう1つの違いは、「エスケープシーケンス」が一重引用符で機能しないことです

puts 'a\nb' # just print a\nb 
puts "a\nb" # print a, then b at newline 
于 2013-05-17T04:38:59.563 に答える
47

文字列に評価されるものに関して、Rubyの一''重引用符と二重引用符には違いがあります。""

最初に、文字列のリテラル形式では、重引用符または二重引用符で囲まれたものはすべて、Ruby String クラスのインスタンスである文字列オブジェクトとして評価されることを明確にしたいと思います。

したがって、'stackoverflow'どちら"stackoverflow"も String クラスのインスタンスを評価し、まったく違いはありません

違い

文字列の 2 つのリテラル形式 (一重引用符または二重引用符) の本質的な違いは、二重引用符ではエスケープ シーケンスが許可されますが、一重引用符では許可されないことです。

単一引用符で作成された文字列リテラルは、文字列補間をサポートせず、シーケンスをエスケープしません。

きちんとした例は次のとおりです。

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

一方

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

一重引用符による補間はまったく機能しません。

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

ベスト プラクティス

ほとんどの Ruby リンターが提案しているように、文字列には一重引用符リテラルを使用し、補間/エスケープ シーケンスの場合は二重引用符を使用します。

于 2016-02-21T22:43:24.390 に答える
41

あなたの質問に答えるには、""文字列補間を行いたいときに使用する必要があります:

a = 2
puts "#{a}"

それ以外の場合は、単純な引用符を使用してください。

また、パフォーマンスの点で違いがあるかどうか疑問に思っている場合は、これに関する素晴らしい質問が StackOverflow にあります。

また、RoR を初めて使用する場合は、まともな Ruby の本を手に取って言語の基礎を学ぶことをお勧めします。自分が何をしているのかを理解するのに役立ちます (また、Rails が魔法であると考えなくて済みます)。個人的にはThe Well Grounded Rubyistをお勧めします。

于 2011-06-18T10:21:44.247 に答える
4

印刷の答え「\n」と同様に、次の違いの別のケースがあります

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

* は二重引用符で囲まれたエスケープ文字に変換されたように見えますが、単一引用符では変換されませんでした。ところで、 str.gsub(/regular expression/, '\1,\2') などの正規表現で使用すると、出力に影響します

于 2013-10-30T01:35:10.073 に答える
-9

この特定のケースでは、どのように記述しても違いはありません。それらは同等です。また、Ruby ガイド/チュートリアルをさらに読みたいと思うかもしれません :)

于 2011-06-18T10:23:05.977 に答える