You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

以!结尾的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:06:03