前情提要:

在第七天我们透过比较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串接的更多相关文章

  1. String类的concat()方法

    String类的concat()方法: public class MyClass { public static void main(String[] args) { String str1=&quo ...

  2. Ruby语言学习系列--String 类函数

        函数名称 说明 示例 * 将字符串拷贝N次 “ha”*4    >> “hahahaha” + <<  concat 连接字符串 “yes” + “no”  >& ...

  3. Ruby字符串(1):String基本用法

    String字符串 字符串由String类提供,除了直接使用单双引号或其它字面量创建字符串,也可以使用String.new()方法来创建. a = "hello" b = Stri ...

  4. Ruby字符串(2):String方法详细整理

    String方法整理 官方手册 类方法 new new(str="") → new_str new(str="", encoding: enc) → new_s ...

  5. 你好,C++(11)如何用string数据类型表示一串文字?根据初始值自动推断数据类型的auto关键字(C++ 11)

    3.5.2  字符串类型 使用char类型的变量我们可以表示单个字符,那么,我们又该如何表示拥有多个字符的字符串呢? 我们注意到,一个字符串是由多个字符串连起来形成的.很自然地,一种最简单直接的方法就 ...

  6. (string find) 亲和串 hdu2203

    亲和串 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  7. hdu 3336:Count the string(数据结构,串,KMP算法)

    Count the string Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  8. string查找字符(串)

    在C语言中 strchr 和 strstr函数都被包含在<string.h>头文件中,也就是要调用它们时要在程序前面包含<string.h>头文件,也就是写这个语句:#incl ...

  9. Day07 - Ruby比一比:Symbol符号与String字串

    前情提要: 第六天我们透过Ruby代码练习public,protected和privatemethod时,发现冒号在前面的参数,:mydraft,:myspace,这些就是符号Symbol.在今天,我 ...

随机推荐

  1. rocketmq 4.3.2 解决远程不能消费问题,解决未识别到公网IP问题

    1.解决远程不能消费问题 问题描述: nameserver和broker启动后,用tools(命令如下)能发送消息和消费消息,在局域网服务器能发送消息,消费启动后收不到消息通知问题 sh tools. ...

  2. 关于微信小程序获取二维码的踩坑记录

    1.踩坑需求:获取小程序的二维码 2.踩坑接口: https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN3 踩坑代码 pu ...

  3. debian 安装libreoffice6.1 转换pdf

    这个东西能转,但效率不高,我已经用专门的服务器docker,速度很快,直接用curl就能返回 但这里还是记录一下直接用命令调用吧,毕竟有的老的地方这么用 && cd /usr/loca ...

  4. MySQL 5.7版本 sql_mode=only_full_group_by 问题

    具体错误: SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in ...

  5. Win10系统下Anaconda下安装多种Python函数库

    建议直接安装Anaconda,这是一个包含Numpy,Pandas,Sklearn等函数库的计算机科学软件包,下面的软件可以在此环境下进行安装下载. 一.计算机视觉 1. OpenCV图像处理 在ht ...

  6. CBSN NEWS

    https://www.cbsnews.com/video/fatal-crossing/

  7. Linux下导入CA证书

    在部署路由器的时候,发现路由器不支持从https安装应用,经过调查,发现是路由器里面没导入证书 安装ca-certificates即可解决. opkg install ca-certificates

  8. c++界面库方案

    最近的开发需要向java以及c++方向转向:看了些java和c++的东西 最近研究了下,最后觉得使用ogre+mygui来实现c++界面,这样用比较方便: 当前ogre,mygui都可以实现界面,可以 ...

  9. JS和CSS交互的方法

    用JavaScript获取伪元素(pseudo-element)属性  var  color=window.getComputedStyle( document.querySelector('.ele ...

  10. vue+vuex+axios实现登录、注册页权限拦截

    1.修改config文件夹里的dev.env.js里的BASE_API,把地址改成请求后端的公共部分 1 BASE_API: '"http://192.168.xx.xx"', 2 ...