Ruby Explained - Strings @ErikTrautman
本篇文章是關於 Ruby中的字串(Strings),以及在Ruby中你能對字串所做的有趣的事。
字串(Strings)是網頁程式中相當巨大的一部份,
字串被用在任何地方,從變數名稱、使用者所輸入的HTML狗屁倒灶文本,到處理巨大的字典檔案,用上的全都是字串。字串的核心相當的簡單,就是些字母的排列組合,但在Ruby中,字串有些非常酷的屬性,可以讓你隨心所欲的操控他。
本篇文章應該會讓你見識到如何任意地玩弄字串,和Ruby所給予的一些便於使用的方法,這些方法會讓你的碼農人生輕鬆一點。
字串是由獨立的字符們所組成,並且包含在""引號中:
> I confuse Ruby and probably throw an error
=> NameError
> "I confuse Ruby and probably throw an error"
=> "I confuse Ruby and probably throw an error"
# 字串要包在""中,這樣才對
""雙引號通常可和''單引號交替使用,兩者幾乎是沒有差別可以任意選用。只有在二種情形下有明顯的區別:
a. 需要在字串中表示引號
> my_long_string = " And she said, 'Cool program!'"
=> "And she said, 'Cool program!'"
另一個方法是使用時殊的脫逃標記,讓''引號可以顯示。
b. 當你想在字串中插值
String Interpolation這個出現在你想要再字串上加些東西的時候,例如:在字串中插入變數。這個相當常用的,舉例來說,在你所製造的網站中有一段文字內容會依據登入的使用者不同而動態改變,使用井字號和大括號就可以用達到目的"#{}",大括號中的值會自動轉換成字串,然後你就能得到新的字串了:
> my_name = "Tiny Tim"
=> "Tiny Tim"
> my_string = "My name is #{my_name}!"
=> "My name is Tiny Tim!"
重點來了:interpolation只在""雙引號中有作用,儘量讓字串中的插值簡明扼要,保持程式碼的易讀性,單引號可以讓一些特殊的字元被正常地顯示出來,#{}在單引號中就起不了作用了:
> my_name = "Neo"
=> "Neo"
> my_string = 'My name is #{my_name}!'
=> "My name is \#{my_name}"
# Hey! That's not what we wanted!
跳脫字元指的是:告訴程式把這些字元當作"一般"的字元處理,不要給他特別待遇,例如:#{},井字號在大括號前含有特殊意義,利用\標記需要跳脫的字元。有時候你會看到摻雜許多奇怪的字元前都跟随著\,你就會知道有人要脫逃了:
> now = "RIGHT NOW"
=> "RIGHT NOW"
> puts "interpolating #{now} but not \#{now}"
> "interpolating RIGHT NOW but not #{now}"
=> nil # Remember, puts returns nil!
IRB 編寫程式碼時會顯示\,但在puts的輸出結果\就會被隱藏。
tedious 冗悶的 冗長乏味的 所以呢,你可以想像一下,假如你試著輸出一篇部落格的文章,或者其他的長篇大論,裡面包含了許多字元,而且不想手動一個一個做…接下來為你介紹一些簡單的方法來完成這事兒
下面有些特殊的字元,
- \ n 產生新的一行
- \r 也是一行新的
- \t 產生一個tab
> puts "let's put a bunch of newlinews between thin\n\n\nand this."
let's put a bunch of newlines between this
and this.
=> nil
#to_s是一個把任何東西轉換成字串(String)方法。注意一下#to_s,在方法名前所加的#只是個慣例,當你在呼叫方法時是不用加#的:
> 12345.to_s
=> "12345"
# 12345 從"數字"轉換成"字串"
這個方法常常在幕後默默地被呼叫著,基本上在 Ruby中或者是 Rails的輸出值、變數render,都會使用to_s的方法,讓跑出來的值本身是親切通用的字串先決。
有趣的事實:如果你創造了你自己的物件(object),就可能需要自己寫或者自己加#to_s,才能在某些設定中正確的顯示。舉例來說,假如你有一個Person的物件,然後當你想puts這個物件的時候,你想要跑出該物件的名字,這時候你就需要寫個#to_s來做這件事。