习题 10: 那是什么?
最后更新于:2022-04-01 05:39:03
在習題 9 中我丟給你了一些新東西。我讓你看到兩種讓字串擴展到多行的方法。第一種方法是在月份中間用 `\n` (back-slash n) 隔開。這兩個字串的作用是在該位置上放入一個「新行(new line)」字符。
使用反斜線 `\` (back-slash) 可以將難印出的字符放到字串裡。針對不同的符號有很多這樣的所謂「跳脫序列(escape sequences)」,但有一個特殊的跳脫序列,就是 `\` 雙反斜線( double back-slash)。這兩個字符組合會印出一個反斜線來。接下來我們做幾個練習,然後你就知道這些跳脫序列的意義了。
另外一種重要的跳脫序列是用來將單引號 `'` 和雙引號 `"` 跳脫。想像你有一個用雙引號括起來的字串,你想要在字串裡的內容裡再加入一組雙引號進去,比如你想說 `" I "understand" joke."` ,Ruby 就認為 `"understand"` 前後的兩個引號是字串的邊界,從而把字串弄錯。你需要一種方法告訴 Ruby 字串裡面的雙引號不是真正的雙引號。
要解決這個問題,你需要將雙引號和單引號跳脫,讓 Ruby 將引號也包含到字串裡面去。這裡有一個例子:
~~~
"I am 6'2\" tall." # escape double-quote inside string
'I am 6\'2" tall.' # escape single-quote inside string
~~~
第二種方法是使用文件語法(document syntax),也就是 `<<NAME` ,你可以在鍵入 `NAME` 前放入\ 任意多行的文字。接下來你可以看到如何使用。
~~~
tabby_cat = "\tI'm tabbed in."
persian_cat = "I'm split\non a line."
backslash_cat = "I'm \\ a \\ cat."
fat_cat = <<MY_HEREDOC
I'll do a list:
\t* Cat food
\t* Fishies
\t* Catnip\n\t* Grass
MY_HEREDOC
puts tabby_cat
puts persian_cat
puts backslash_cat
puts fat_cat
~~~
## 你應該看到的結果
注意你打出來的 tab 字符,這節練習中的文字間隔符號對於答案的正確性是很重要的。
~~~
$ ruby ex10.rb
I'm tabbed in.
I'm split
on a line.
I'm \ a \ cat.
I'll do a list:
* Cat food
* Fishies
* Catnip
* Grass
$
~~~
## 加分習題
1. 上網搜尋一下還有哪些可用的跳脫字符。
2. 結合跳脫序列和格式化字串,創造一種複雜的格式。