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

Ruby中嵌套if语句赋值变量为何为nil?添加输出后返回domain?

Ruby变量赋值问题分析

为什么第一段代码中a是nil?

Ruby里,任何代码块(包括if块)的返回值,都是块内最后一个被执行的表达式的结果。我们拆解第一段代码:

a = if true
    "domain" if true  # 条件为true,返回"domain",但这个值只是临时结果,没被保留
    "nilr" if nil     # nil是假值,条件不成立,这个表达式返回nil
end

外层if true会执行内部两行代码,整个if块的返回值是最后一行表达式的结果——nil,所以a被赋值为nil。

为什么添加puts a.class后你看到a是"domain"?

这不是代码逻辑的问题,大概率是你在irb(交互式Ruby环境)中逐行输入代码时的操作误差:
比如你可能把赋值代码拆成了分步输入:

  • 先输入a = if true并回车,irb等待你输入块内代码
  • 输入"domain" if true并回车,irb会默认你结束了if块,直接把这行的结果"domain"赋值给a
  • 再输入"nilr" if nil,这行的结果是nil但不会修改已经赋值的a
  • 最后执行puts a.class,自然输出String,看起来a是"domain"

但如果把两段代码都保存成.rb脚本文件执行,不管有没有puts a.class,a的值都会是nil——因为脚本会按完整的if块执行,内部两行代码都会跑完,最后一行的nil作为块的返回值赋值给a。

内容的提问来源于stack exchange,提问作者isethi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:24:23