Ruby 程式設計/替代引號
外觀
在 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}/