前情提要:面试
在第七天咱们透过比较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里实做的功能,老是会有不一样的写法,让咱们能够根据状况选择适合本身最佳的使用时机,这些设计是否是很聪明呢?