Day08 - Ruby比一比:String的+=與concat串接

前情提要:面試

在第七天咱們透過比較Symbol和String,發現字串比符號多了更多方法!爲了活用string method,今天咱們接續前文,來探討一題跟字串有關的題目:ruby

Ruby經典面試題目#08(leafor)
+=和concat有什麼不一樣?What’s difference between concat and +=?app

concat是英文concatenate的縮寫,意思是串接(link things together in a chain or series.)咱們想知道的是:串接完以後,仍然會指向同一個物件(使用同一個內存位置)嗎?設計

要解答此一問,必須使用前一篇所使用的印出內存位置方法.object_id。get

咱們來創造一個屬於第八天的、指向第八天的字串物件的變數tingsmessage:string

tingsmessage =「This is my 8th article!」
p tingsmessage.object_id
內存位置在:it

47023721077820
第八天呢!新的一週開始,值得歡呼一下:io

tingsmessage.concat「Yay!」
p tingsmessage
p tingsmessage.object_id
印出來的結果,還是在第八天的位置歡呼唷:)ast

This is my 8th article!Yay!
47023721077820
若是用+=方法呢?object

tingsmessage +=「Plus One Everyday!」
p tingsmessage
p tingsmessage.object_id
加了+=天天都加一篇這段敘述,結果內存位置隨着+方法而改變了:

This is my 8th article!Yay!Plus One Everyday!
47358398608700
按照第七天文章的結論,讀取相同內存位置不會變來變去,時間耗費短,所以concat方法較省時。+ or .concat,what is faster for appending string in Ruby?這篇文章的做者已經在ruby幫咱們作了一個串接string的benchmark實驗,很是有趣。

提到了concatenation串接,一般會和interpolation插入拿來一塊兒談。

若是咱們在明天、想要調整第9天的message呢(xcsjbj)?

換湯不換藥,其實大部分的信息字串都是同樣的,只是天數改變,因此咱們能夠設一個整數變數tingsironmanday,將數字Number轉爲字串String,利用剛剛學的+方法串再一塊兒:

tingsironmanday = 9
p「I've written」+ tingsironmanday.to_s +「articles!」
# =>「I've written 9 articles!」
interpolation概念,就是#{}大括號包住數字變數,此方法自動會幫咱們轉換數字爲字串,讓代碼更簡潔,可讀性更高。:)

p「I've written #{tingsironmanday} articles!」# =>「I've written 9 articles!」從今天舉的例子們能夠發如今ruby裏實做的功能,老是會有不一樣的寫法,讓咱們能夠根據狀況選擇適合本身最佳的使用時機,這些設計是否是很聰明呢?

相關文章
相關標籤/搜索