延續昨天字串雞屁股(昨天的留言XD)的內容,昨天主要說明單引號與雙引號的字串,今天會說明 加上倒引號的字串 意義,以及字串的 運算 與 存取字符 方式。
'字串'
、 "字串"
、 (倒引號)字串(倒引號)
今天要來講第三種,在字串前後加上倒引號『 ` 』(通常在鍵盤的ESC下方那個按鍵),是用於命令的執行,節錄書中一段(p.55):
『當文字被倒引號( ` )括住時,該文字會被視為一個夾上雙引號( " )的字串實字。該實字會被傳遞給一個名為 Kernel. 的方法。此方法會將該文字當成作業系統的一個shell 命令來執行,並且將命令的輸出當成一個字串傳回。』
例如:我們在終端機中,如欲看資料夾下的檔案,在Unix 系統我們會打 ls
,在Windows 系統我們會打 dir
。這些效果等同於用Ruby 寫(倒引號)ls(倒引號)
或(倒引號)dir(倒引號)
,請看下圖:
請看三個紅色框框的部分,原本終端機上我直接打 ls
,可以列出資料夾下的檔案,而當我進入 irb (interactive Ruby) [註1] 模式時,我打 (倒引號)ls(倒引號)
,執行結果一樣將該目錄底下的資料夾列出來,並且是以字串的模式顯示。另外,如同單引號與雙引號有相對應的 %q
與 %Q
(詳情請看昨天的文章),倒引號也有相對應的 %x
可使用,效果完全相同。
[註1] irb(interactive Ruby)是一種Ruby shell,有安裝Ruby 就可以直接在自己終端機進入irb 模式,並鍵入任何Ruby 的運算式。
先來認識兩個字串的運算符:『 + 』、『 « 』,直接看例子比較好懂:
"國父" + " " + "孫中山先生"
=> "國父 孫中山先生"
"國父" << " " << "孫中山先生"
=> "國父 孫中山先生"
看起來兩個運算符的結果一模一樣,都是把字串接在一起了,但有一個很大的差異是:
+
在接完字串之後,會回傳一個新的字串物件!
<<
是直接更改最左邊的字串,而不會回傳一個新的物件!
接著再看 *
運算符:
"我愛Ruby" * 3
=> "我愛Ruby我愛Ruby我愛Ruby"
3 * "我愛Ruby"
TypeError: String can't be coerced into Fixnum
可以知道字串可以乘三遍,但顛倒過來就會報錯!(真的跟日常生活的乘法是一樣的哈哈哈)
數字可以比大小:
3>2
=> true
-3>-2
=> false
字串也可以比大小!
"R">"U"
=> false
"B">"Y"
=> false
"Ruby">"RUBY"
=> true
咦?這個結果是怎麼回事XD 書中提到這其實是跟ASCII 編碼有關,所有大寫字母的編碼都比小寫字母小,在前面的連結中,我們可以看到,R 的編碼為52,U 的編碼為55,所以"R">"U"是錯的,依此類推。
『String 所支援的運算符中最重要的或許是方括號陣列索引運算符 [] ,此運算符可用於提取或修改字串中的特定部分。』
a = "我愛Ruby!"
a[0] #=> "我" 第一個字
a[1] #=> "愛"
a[2] #=> "R"
a[-1] #=> "!" 倒數第一個字
a[-2] #=> "y"
a[-7] #=> "我"
a[-8] #=> nil 找不到這個字
a[2,4] #=> "Ruby" 第2+1個字,往右數總共要4個字
a[2,4] = "Python" #取代為Python XD
a => "我愛Python!"
所有字串開頭都是第0個數,往右正著數,往左負著數,如果超出範圍字串長度就會找不到這個字,取代的方法可以參考上面程式碼最後三行。
今天是Lucky 7 day!今天發現這句很發人深省!
“We cannot teach people anything. We can only help them discover it within themselves.” Galileo Galilei
我的鐵人賽的文章可能完全不能當作教學文章,但希望可以給有興趣碰Ruby 的朋友一點方向,快加入Ruby 的行列吧XD!