ruby中带“!"和不带"!"的方法的最大的区别就是带”!"的会改变调用对象本身了。比方说str.gsub(/a/, 'b'),不会改变str本身,只会返回一个新的str。而str.gsub!(/a/, 'b')就会把str本身给改了。

但是gsub和gsub!还有另外一个不同点就是,gsub不管怎么样都会返回一个新的字符串,而gsub!只有在有字符被替换的情况下才会返回一个新的字符串,假如说没有任何字符被替换,gsub!只会返回nil.

'abc'.gsub(/a/, 'b') #返回'bbc'
'abc'.gsub!(/a/, 'b') #返回'bbc'
'abc'.gsub(/d/,'a') #返回'abc'
'abc'.gsub!(/d/, 'a') #返回nil 
带!的函数都是危险函数,果不其然1.8.7 :001 > line = "dfkadlf"=> "dfkadlf"
1.8.7 :002 > line.chomp!=> nil
1.8.7 :003 > line=> "dfkadlf"
1.8.7 :004 > line.chomp!.to_s=> ""
1.8.7 :005 > line = "dfkadlf\n"=> "dfkadlf\n"
1.8.7 :006 > line.chomp!.to_s

我原本期待line.chomp!.to_s都是返回dfkadlf,但如果输入的行是最后一行,没有\n结尾,那返回的是""
就是说,如果直接使用line.chomp!的结果是危险的,他会忽略掉最后一行的数据(如果没有最后的空行)

strip!也是同样的

所以,带!的函数是不能直接用的,应该取他的原值

ruby gsub gsub! chomp chomp! 以及所有类似函数用法及区别相关推荐

  1. C#中ToInt32以及类似函数用法介绍

    C#中ToInt32以及类似函数用法介绍 作用 程序举例 程序逻辑 程序代码 程序 作用 将指定的值转换为 32 位有符号整数.对应的还有ToInt16,ToInt64 指定的值可以是字符串.时间.位 ...

  2. linux中awk下 gsub函数用法

    gsub函数则使得在所有正则表达式被匹配的时候都发生替换 gsub(regular expression, subsitution string, target string);简称 gsub(r,s ...

  3. Linux中gsub函数,Linux中awk下 gsub函数用法

    一.遇到的问题: 问题:echo "a b c 2011-11-22 a:d" | awk '$4=gsub(/-/,"",$4)'为啥 输出后 2011-11 ...

  4. oracle中类似indexof用法_instr函数

    oracle中类似indexof用法_instr函数 [sql] 在oracle中没有indexof()函数 但是提供了一个 instr() 方法 具体用法: select instr('保定市南市区 ...

  5. scala 字符串函数_Scala中的字符串chomp(或chop)函数

    scala 字符串函数 剁或剁弦 (Chop or Chomp string) It is used to chop off the end of line characters. For this ...

  6. 把事务封装成类似Serializable用法的特性

    最近几天上班没事可做就想着整理常用的类库方法,验证.消息.分页.模版引擎.数据库操作.ini操作.文本操作.xml操作等,最后就是现在这个事务特性. 1 /// <summary> 2 / ...

  7. error C2448 函数样式初始值设定项类似函数定义

    类似这种的 int grow_expansion(elen, e, b, h) int elen; REAL *e; REAL b; REAL *h; {// function definition ...

  8. tf.placeholder类似函数中的形参

    tf.placeholder(dtype, shape=None, name=None) 此函数可以理解为形参,用于定义过程,在执行的时候再赋具体的值 参数: dtype:数据类型.常用的是tf.fl ...

  9. python filter()函数(与map()、reduce()函数用法类似,根据给定函数判断列表元素是True还是False,返回剔除元素后的元素列表)

    filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表. 该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 ...

最新文章

  1. 毕业使人头秃:发现自己的idea已经被人发表了,该怎么办?
  2. 自动驾驶的视觉感知包括哪些内容?
  3. [技术转载]C#知识点集合 (面试必备)
  4. 原生Android12,Android 12原生设计曝光 网友看了惊呼神似iOS
  5. ABAP和Java里关于DEFAULT(默认)机制的一些语言特性
  6. 安装安全狗后php5.5无法访问,关于安全狗的详细介绍
  7. java中的包装流和缓冲流概述
  8. html 评分五角星的插件,jquery五角星评分插件示例分享
  9. 数组中的对象的特征值提取生成新对象实现方法
  10. SVG SMIL animation动画详解
  11. fields and vector spaces
  12. 曲面化原理创新设计_女裤制版要多久创新服务
  13. 程序员计算器HEX、EDC、OCT的意思
  14. 单片机c语言灯开关程序,使用单片机模拟开关灯的电路图和资料及源代码概述...
  15. 攻防世界mfw--详细笔记
  16. yamlip 安装_SpringBoot中yaml配置对象
  17. php waf 搭建,如何构建属于自己的nginx waf防火墙 VeryNginx
  18. 阿里云服务器被攻击了
  19. 从算法工程师到全栈开发者,我终于明白了数据科学的真谛
  20. 阿里云服务器购买折扣优惠券及注意事项

热门文章

  1. 【原创视频教程】学生信息管理系统6--学员信息管理(完结篇)
  2. 您的关注是我最大的快乐
  3. php找不到指定的模块,php中的dll“无法找到指定的模块”
  4. 梳理MVC 架构 MVVM架构
  5. react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output and
  6. 在Tomcat上挂载预下载文件的方法
  7. JAVA SE学习day_15:thread线程池
  8. java模拟数据库压测_java应用的优化【转】
  9. C语言数组知识体系整理大学霸IT达人
  10. Android动画曲线库AndroidEasingFunctions