Day08 - Ruby比一比:String的+=与concat串接
前情提要:
在第七天我们透过比较Symbol和String,发现字串比符号多了更多方法!为了活用string method,今天我们接续前文,来探讨一题跟字串有关的题目:
Ruby经典面试题目#08(leafor)
+=和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呢(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里实作的功能,总是会有不同的写法,让我们可以根据情况选择适合自己最佳的使用时机,这些设计是不是很聪明呢?
Day08 - Ruby比一比:String的+=与concat串接的更多相关文章
- String类的concat()方法
String类的concat()方法: public class MyClass { public static void main(String[] args) { String str1=&quo ...
- Ruby语言学习系列--String 类函数
函数名称 说明 示例 * 将字符串拷贝N次 “ha”*4 >> “hahahaha” + << concat 连接字符串 “yes” + “no” >& ...
- Ruby字符串(1):String基本用法
String字符串 字符串由String类提供,除了直接使用单双引号或其它字面量创建字符串,也可以使用String.new()方法来创建. a = "hello" b = Stri ...
- Ruby字符串(2):String方法详细整理
String方法整理 官方手册 类方法 new new(str="") → new_str new(str="", encoding: enc) → new_s ...
- 你好,C++(11)如何用string数据类型表示一串文字?根据初始值自动推断数据类型的auto关键字(C++ 11)
3.5.2 字符串类型 使用char类型的变量我们可以表示单个字符,那么,我们又该如何表示拥有多个字符的字符串呢? 我们注意到,一个字符串是由多个字符串连起来形成的.很自然地,一种最简单直接的方法就 ...
- (string find) 亲和串 hdu2203
亲和串 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- hdu 3336:Count the string(数据结构,串,KMP算法)
Count the string Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- string查找字符(串)
在C语言中 strchr 和 strstr函数都被包含在<string.h>头文件中,也就是要调用它们时要在程序前面包含<string.h>头文件,也就是写这个语句:#incl ...
- Day07 - Ruby比一比:Symbol符号与String字串
前情提要: 第六天我们透过Ruby代码练习public,protected和privatemethod时,发现冒号在前面的参数,:mydraft,:myspace,这些就是符号Symbol.在今天,我 ...
随机推荐
- shell脚本,如果文件中的第一列有相同的,就把相同的那些行的其他字段相加
命令:awk '{a[$1]+=$2}{b[$1]+=$3}END{for(i in a){print i,a[i],b[i]}}'
- [ZZ] 用matlab绘制箭头
用matlab绘制箭头 http://npfeng900.blog.163.com/blog/static/14456108201221922944998/ 用matlab绘制箭头1 用matlab绘 ...
- docker 快速部署ES集群 spark集群
1) 拉下来 ES集群 spark集群 两套快速部署环境, 并只用docker跑起来,并保存到私库. 2)弄清楚怎么样打包 linux镜像(或者说制作). 3)试着改一下,让它们跑在集群里面. 4) ...
- 工控随笔_15_西门子_WinCC的VBS脚本_05_变量类型之三_VBS数组
数组是一种复杂数据类型,不但有数组本身的数据类型: 数组,还有数组元素中存储的数据的类型. 一.vbs中的数组类型 在VBS中提供了两种数组类型,一种是固定数组,一种是动态数组. 1.固定数组 就是在 ...
- (转)android 中uri.parse()用法
1,调web浏览器 Uri myBlogUri = Uri.parse("http://xxxxx.com"); returnIt = new Intent(Intent.ACTI ...
- CentOS下puppet安装
简介 Puppet是开源的基于Ruby的系统配置管理工具,puppet是一个C/S结构, 当然,这里的C可以有很多,因此,也可以说是一个星型结构. 所有的puppet客户端同一个服务器端的puppet ...
- 学习笔记《Java多线程编程实战指南》四
JAVA线程同步机制 线程同步机制:是一套用于协调线程间的数据访问及活动的机制,该机制用于保障线程安全以及实现这些线程的共同目标.java平台提供的线程同步机制包括锁.volatile关键字.fina ...
- python的列表综合list-comprehension示例,及两列表取补集
两个目的: 1. 了解了python的list comprehesion的用法 2. 了解了两个列表取交集和补集的方法 R语言取交集和补集更简单,直接有函数. perl 稍麻烦一些, 关键是用hash ...
- Qt之QTreeWidget入门
QTreeWidget的一些基本操作 1.insertTopLevelItems,insertTopLevelItem用来添加顶层的item QTreeWidget *treeWidget = new ...
- golang初识 - install go on ubuntu
WSL: Ubuntu 18.04 1. install go (1) unzip sudo mkdir -p /usr/local/go sudo tar zxvf go1.12.4.linux-a ...