case/when 表达式
多路分支
case/when 表达式 是 CoddyKit 上的免费 Ruby Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Ruby Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Ruby Academy 课程共包含 4 节课。
多路分支
当您要将一个值与多种可能性进行比较时,冗长的 if/elsif 链会显得杂乱。Ruby 的 case 表达式可以让多路分支保持简洁、易读。
day = "Mon"
case day
when "Sat", "Sun"
puts "Weekend"
else
puts "Weekday"
end基本的 case / when
case 后面的值会按顺序与每个 when 进行比较。第一个匹配项会运行,随后控制流跳转到 end。
grade = "B"
case grade
when "A"
puts "Excellent"
when "B"
puts "Good"
when "C"
puts "Okay"
end一个 when 使用多个值
请在一个 when 中使用逗号分隔列出多个值。只要其中任意一个匹配,该分支就会运行。
char = "e"
case char
when "a", "e", "i", "o", "u"
puts "Vowel"
else
puts "Consonant"
endelse 分支
添加 else 作为兜底分支。如果没有它,没有匹配项的 case 会直接返回 nil。
code = 500
case code
when 200
puts "OK"
when 404
puts "Not Found"
else
puts "Other status"
endcase 是表达式
与 if 一样,case 会返回匹配分支的值,因此您可以直接将其赋值。
score = 82
letter = case
when score >= 90 then "A"
when score >= 80 then "B"
else "C"
end
puts letterthen 关键字
对于简短分支,请使用 then 将主体放在与 when 相同的行上。
n = 3
case n
when 1 then puts "one"
when 2 then puts "two"
when 3 then puts "three"
end匹配范围
when 可以包含一个范围。Ruby 会在幕后使用 === 运算符,而范围的 === 会检查成员关系。
score = 73
case score
when 90..100 then puts "A"
when 70..89 then puts "B"
when 0..69 then puts "C"
end按类匹配
由于当对象是某个类的实例时,Class === object 的结果为 true,因此您可以根据类型进行分支。
value = 3.14
case value
when Integer then puts "an integer"
when Float then puts "a float"
when String then puts "a string"
end=== 的魔力
每个 when 都会调用 pattern === value。范围、类和正则表达式都定义了实用的 === 行为,这正是 case 如此灵活的原因。
email = "jane@example.com"
case email
when /@/ then puts "Looks like an email"
else puts "No @ sign"
end不带主题的 case
省略 case 后面的值,即可像整洁的 if/elsif 一样编写一系列清晰的布尔条件。
temp = 5
case
when temp < 0 then puts "Freezing"
when temp < 15 then puts "Cold"
when temp < 25 then puts "Mild"
else puts "Warm"
end综合运用
当一个值驱动决策时,case 非常理想。当每个分支都是独立的布尔测试时,请使用不带主题的形式。
role = :admin
msg = case role
when :admin then "Full access"
when :editor then "Can edit"
when :viewer then "Read only"
else "No access"
end
puts msg快速检查
测试您对 case/when 的理解。
回顾
您已经学习了 case 表达式:
when会匹配第一个命中项,然后跳转到end。- 一个
when可以列出多个值。 case会返回值,并支持then。- 范围、类和正则表达式之所以有效,是因为
when使用了===。 - 不带主题的形式是一条简洁的布尔条件链。
n = 42
kind = case
when n.zero? then "zero"
when n.positive? then "positive"
else "negative"
end
puts kind常见问题解答
「case/when 表达式」课时是免费的吗?
是的 — 「case/when 表达式」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Ruby Academy 课程的其余内容,请升级到 CoddyKit PRO。 Ruby Academy 课程共包含 4 节课。
「case/when 表达式」这节课中我会学到什么?
多路分支 你通过在浏览器中直接运行的动手代码来练习 Ruby Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Ruby Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Ruby Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「case/when 表达式」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Ruby Academy 课中编写并运行代码吗?
能。每节 Ruby Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- if、unless、三元运算符
- case/when 表达式
- Ruby 中的真值判断
- 守卫子句