以!结尾的Ruby方法含义是什么?与无!版本有什么差异?
Ruby 方法末尾!的通俗解释
1. 方法末尾的!到底有啥用
Ruby里给方法末尾加!,本质是提醒你这个方法是「直接修改原数据」的类型,和不带!的普通版区别很大:
- 不带!的
upcase:会把你要改的字符串复制一份新的,把新的这份改成全大写再还给你,原来的字符串是什么样还是什么样,完全不受影响。 - 带!的
upcase!:不会复制新的内容,直接在你原来的字符串上改成全大写,改完之后如果确实做了修改就返回改后的内容,如果原来的字符串已经是全大写了,就返回空值(nil)。
2. 用upcase!赋值后,后续引用first_name是不是都是全大写?
只要你输入的名字不是本来就全大写的,赋值后的first_name存的就是全大写内容,之后所有调用这个变量的地方,输出都会是全大写。
但要注意踩坑:如果你输入的本来就是全大写的名字,比如输入JOHN,upcase!会返回空值,这时候first_name就被赋值成空值,后续输出就会是空的,不会显示你的名字。
3. 去掉代码里的!,运行逻辑会有什么变化?
去掉!之后用的就是普通的upcase方法,不管你输入的名字是不是已经是全大写,它都会返回一个全大写的新字符串给你,不会出现返回空值的情况,比带!的版本更稳妥,不会出现刚才说的输出为空的问题。
简单例子对比差异
# 带!的情况 origin_name = "alice" result = origin_name.upcase! puts origin_name # 输出 ALICE,原来的字符串被直接改了 puts result # 输出 ALICE # 不带!的情况 origin_name = "alice" result = origin_name.upcase puts origin_name # 输出 alice,原来的字符串完全没变化 puts result # 输出 ALICE,返回的是改好的新内容
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

