跳至內容

Ruby 程式設計/替代引號

來自 Wikibooks,為開放世界提供開放書籍

← 字串 | Here 文件 →


在 Ruby 中,用引號括住字串文字的方法不止一種。其中很多方法對於 Perl 程式設計師來說並不陌生。

這些替代方法是

  • 帶有 %q 運算子的單引號:%q(abc) 等同於 'abc'
  • 帶有 %Q 運算子的雙引號:%Q(abc's) 等同於 "abc's"

替代單引號

[編輯 | 編輯原始碼]

假設我們使用單引號列印以下路徑。

puts 'c:\bus schedules\napolean\the portland bus schedule.txt'

這將產生以下輸出

c:\bus schedules\napolean\the portland bus schedule.txt

單引號保留了 \b\n\t,防止它們被當作 轉義序列 處理(Wikibooks 的語法高亮顯示無法做到這一點)。

現在讓我們考慮以下字串文字

puts 'c:\napolean\'s bus schedules\tomorrow\'s bus schedule.txt'

這將輸出

c:\napolean's bus schedules\tomorrow's bus schedule.txt

對撇號進行轉義會降低程式碼的可讀性,並且無法直觀地瞭解到會打印出什麼內容。

幸運的是,在 Ruby 中,有一個更好的方法。可以使用 %q 運算子來應用 單引號規則,並選擇你自己的 分隔符。這個分隔符將標記字串文字的開始和結束。

puts %q!c:\napolean's documents\tomorrow's bus schedule.txt!
puts %q/c:\napolean's documents\tomorrow's bus schedule.txt/
puts %q^c:\napolean's documents\tomorrow's bus schedule.txt^
puts %q(c:\napolean's documents\tomorrow's bus schedule.txt)
puts %q{c:\napolean's documents\tomorrow's bus schedule.txt}
puts %q<c:\napolean's documents\tomorrow's bus schedule.txt>

每一行都將打印出相同的文字

c:\napolean's documents\tomorrow's bus schedule.txt

你可以使用任何標點符號作為分隔符,而不僅僅是示例中列出的那些。

當然,如果選擇的分割符出現在字串文字中,則需要對其進行轉義。

puts %q#c:\napolean's documents\tomorrow's \#9 bus schedule.txt#

但是,如果使用匹配的花括號來分隔文字,則可以在不進行轉義的情況下巢狀花括號。

puts %q(c:\napolean's documents\the (bus) schedule.txt)
puts %q{c:\napolean's documents\the {bus} schedule.txt}
puts %q<c:\napolean's documents\the <bus> schedule.txt>

替代雙引號

[編輯 | 編輯原始碼]

%Q 運算子(注意 %Q 中的 Q 的大小寫)允許你使用 雙引號規則 建立字串文字,但不需要使用雙引號作為分隔符。它的工作原理與 %q 運算子非常相似。

 print %Q^Say:\tHello world\n\tHello world\n^
 print %Q(Say:\tHello world\n\tHello world\n)

就像雙引號一樣,你可以在這些字串文字中 插入 Ruby 程式碼。

 name = 'Charlie Brown'
 
 puts %Q!Say "Hello," #{name}.!
 puts %Q/What is "4 plus 5"? Answer: #{4+5}/
華夏公益教科書