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里实做的功能,老是会有不一样的写法,让咱们能够根据状况选择适合本身最佳的使用时机,这些设计是否是很聪明呢?

相关文章
相关标签/搜索