Crystal 有一個稱為String的型別,用來表示文字。
Crystal 的字串是一連串的 Unicode 字元。
字串是不可變的,這代表一旦建立之後就無法更改。
也就是說,每次修改字串時都會建立新的字串;因此,原始字串不會被修改。
要定義字串,使用雙引號"。
"Hello World"
要串接兩個字串,請使用+運算子。
+運算子會回傳一個結合這兩個字串的新字串。
hello = "Hello"
hello + " World"
# => "Hello World"
to_i方法會將字串轉換成整數。
或者,也可以用to_f方法回傳浮點數。
如果字串無法轉換成數字,就會拋出ArgumentError。
"1".to_i
# => 1
"1.0".to_f
# => 1.0
"Hello".to_i
# => ArgumentError: Invalid integer: Hello
使用to_s方法可以將整數或浮點數轉換成字串。
1.to_s
# => "1"
1.0.to_s
# => "1.0"
內插是一種方便的方式,可以結合字串並在字串中嵌入運算式。
要內插字串,可以使用#字元,後面接著大括號{},並把運算式放在大括號裡。
name = "World"
"Hello #{name}!"
# => "Hello World!"
Crystal 會自動將運算式的結果轉換成字串。
"Hello #{1 + 1}!"
# => "Hello 2!"
當你需要知道字串中有多少個字元時,可以使用size方法,它會以整數回傳字串的長度。
字串的長度是字串本身儲存的屬性,所以每次呼叫這個方法時不必重新計算長度,因此速度非常快。
"Hello World".size
# => 11
索引是指你想從字串中取得特定字元的時候。
要從String取得字元,可以使用大家熟悉的括號表示法。
[]是以 String 實體方法實作的,其中索引就是這個方法的引數。
字串中的第一個字元位於索引 0。
"Hello World"[0]
# => 'H'
"Hello World"[6]
# => 'W'
要從字串結尾取得字元,你可以用字串長度減一來取得最後一個字元的索引,要取得倒數第二個字元,就用字串長度減二,依此類推。 這件事有個捷徑,就是直接使用負索引:最後一個字元位於索引 -1,倒數第二個字元位於索引 -2,依此類推。
name = "Hello World"
name[name.size - 1]
# => 'd'
name[-1]
# => 'd'
有些字元無法直接寫在字串裡,而是必須使用跳脫序列。
例如,如果你想在字串裡使用雙引號,就必須將雙引號跳脫。
你可以使用\字元來寫出跳脫序列,後面接著你想跳脫的字元。
以下是 Crystal 中的特殊字元:
| 值 | 說明 |
|---|---|
\a |
警示 |
\b |
退格 |
\e |
跳脫 |
\f |
換頁 |
\n |
換行或新行 |
\r |
回車 |
\t |
水平定位字元 |
\v |
垂直定位字元 |
\\ |
反斜線 |
\' |
單引號 |
\" |
雙引號 |
\377 |
八進位 ASCII 字元 |
\xFF |
十六進位 ASCII 字元 |
\uFFFF |
十六進位 Unicode 字元 |
puts "Hello \"World\""
# => Hello "World"
puts "Hello \nWorld"
# => Hello
# => World
要寫出多行字串,使用的語法和單行字串相同,只是在字串裡想要有幾行就換幾次行。
"Hello
World"
# => "Hello\nWorld"
從前有一位性格古怪的程式設計師,住在一棟裝了鐵窗的奇特房子裡。 有一天,他在一個線上求職看板上接下了一份工作,要打造一個派對機器人。這個 機器人應該要問候人們,並引導他們入座。第一版非常技術導向,也顯露出這位 程式設計師缺乏與人互動的能力。其中有些特點也被帶到了下一版。
實作 welcome 方法,使用給定的名字回傳一段歡迎訊息:
PartyRobot.welcome("Christiane")
# => Welcome to my party, Christiane!
實作 happy_birthday 方法,使用這個人的名字和年齡回傳一段生日訊息。
可惜這位程式設計師有點愛現,所以機器人得展現它對每位賓客生日的了解。
PartyRobot.happy_birthday("Frank", 58)
# => Happy birthday Frank! You are now 58 years old!
實作 assign_table 函式來指引方向。
它應該接受 5 個參數。
String)Int)String)String)Float64)確切的結果格式可以參考下面的範例。
同桌賓客的名字應該縮寫成名字的第一個和最後一個字母。 Frank 變成 Fk,Christian 變成 Cn,以此類推。
機器人會提供桌號。 機器人也會提到這張桌子的距離。 幸好,精度只限於 1 位數。
PartyRobot.assign_table("Christiane", "on the left", 27, 23.7834298, "Frank")
# =>
# Welcome to my party, Christiane!
# You have been assigned to table 27. Your table is on the left, exactly 23.8 meters from here.
# You will be sitting next to Fk.