Ruby面試精選30題 - Day08 Sting的concat串接

在第七天我們透過比較SymbolString,發現字串的方法比符號多了許多!為了活用更多字串的方法,今天我們接續前文,來探討一題跟字串有關的題目。


Ruby經典面試題目 #08

  • +=concat有什麼不同? What’s difference between concat and += ?

concat是英文concatenate的縮寫,意思是串接(link things together in a chain or series.)串接完之後,仍然會指向同一個物件嗎?(使用同一個記憶體位置)?

要解答此一問,必須再使用前一篇所使用的印出記憶體位置方法.object_id

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

tingsmessage = "This is my 8th article! "
p tingsmessage.object_id

記憶體位置在:

47023721077820

第八天呢!鐵人賽新的一週開始值得歡呼一下:

tingsmessage.concat "Yay! "
p tingsmessage
p tingsmessage.object_id

印出來的結果是,還是在第八天的位置歡呼呢:)

This is my 8th article! Yay!
47023721077820

如果用+=方法呢?

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呢?

換湯不換藥,其實大部分的訊息字串都是一樣的,只是天數改變,所以我們可以設一個整數變數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裡,一樣的功能總是有不同的寫法,讓我們可以根據情況選擇適合自己最佳的使用時機,這些設計是不是很聰明呢?

===

Ref: