簡體   English   中英

雙引號與單引號

[英]Double vs single quotes

我應該在特定時間使用""還是''

我大部分時間都使用單引號,因為它更容易打字,但我不確定是否應該使用。

例如get 'user/new'get "user/new"

" "允許您進行字符串插值,例如:

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

除了插值,另一個區別是“轉義序列”在單引號中不起作用

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

在 Ruby 中,單''和雙引號""在評估字符串的內容方面存在差異。

最初,我想澄清一下,在字符串的字面形式中引號或引號之間的任何內容都被評估為字符串對象,它是 Ruby String 類的一個實例。

因此, 'stackoverflow'"stackoverflow"都將評估 String 類的實例,完全沒有區別

區別

字符串的兩種文字形式(單引號或雙引號)之間的本質區別在於,雙引號允許轉義序列,而單引號則不允許!

由單引號創建的字符串文字不支持字符串插值並且不轉義序列。

一個簡潔的例子是:

"\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 Linter 建議對您的字符串使用單引號文字,在插值/轉義序列的情況下使用雙引號

要回答您的問題,您必須在要進行字符串插值時使用""

a = 2
puts "#{a}"

否則使用簡單的引號。

此外,如果您想知道在性能方面是否存在差異, StackOverflow 上有一個很好的問題。

如果你真的是 RoR 的新手,我強烈建議你拿起一本像樣的 Ruby 書來學習這門語言的基礎知識。 它會幫助你理解你在做什么(並且不會讓你認為 Rails 是魔法)。 我個人推薦The Well grounded Rubyist

單引號字符串不處理 ASCII 轉義碼(\\n、\\t 等),並且它們不執行字符串插值,而雙引號則兩者都執行。

轉義碼示例:

2.4.0 :004 >   puts 'Hello \n World'
Hello \n World

2.4.0 :005 > puts "Hello \n World"
Hello
World

插值示例:

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

與打印中的答案“\\n”類似,以下是另一種不同的情況

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

所以看起來 * 被轉換為雙引號中的轉義字符,但不是單引號中的。 順便說一句,在正則表達式中使用時會影響輸出,例如 str.gsub(/regular expression/, '\\1,\\2')

您想要使用單引號的另一個原因是將正則表達式模式作為字符串傳遞時:

此正則表達式模式將起作用,因為在單引號內傳遞:

"123 ABC".match('\d')
=> #<MatchData "1">

此正則表達式模式將失敗,因為在雙引號內傳遞(您必須雙重轉義它才能使其工作):

"123 ABC".match("\d")
=> nil

在這種特定情況下,編寫它的方式沒有區別。 它們是等價的。 此外,您可能想閱讀更多 Ruby 指南/教程 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM