case/in 基础
结构化匹配
case/in 基础 是 CoddyKit 上的免费 Ruby Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Ruby Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Ruby Academy 课程共包含 4 节课。
模式匹配登场
Ruby 的 case/in 表达式执行结构模式匹配:它检查数据的形状和内容,而不仅仅是相等性。这是对 case/when 的强大升级。
case 42
in Integer
puts 'it is an integer'
endcase/in 与 case/when
case/when 使用 === 进行比较(类似相等性比较)。case/in 会解构值,并且可以绑定变量。需要匹配结构时,请使用 in。
case 'hello'
in String => s
puts "string of length #{s.length}"
end匹配字面量
in 分支可以匹配字面量值,作用类似精确的相等性检查。
case 3
in 1 then puts 'one'
in 3 then puts 'three'
in _ then puts 'other'
end类型模式
指定一个类可以匹配该类型的任意值,其底层使用了 ===。
def describe(x)
case x
in Integer then 'number'
in String then 'text'
in Array then 'list'
end
end
puts(describe([1, 2]))绑定变量
模式中的裸标识符会绑定匹配到的值,并将其赋给一个可以在分支中使用的新变量。
case [1, 2]
in [a, b]
puts(a + b)
end通配符
下划线 _ 可以匹配任何内容,但不会进行绑定。您可以用它匹配所有情况,或忽略某些位置。
case 99
in 0 then puts 'zero'
in _ then puts 'something else'
end固定运算符
如果要匹配现有变量的值(而不是绑定一个新变量),请使用 ^ 将该变量固定。
expected = 5
case 5
in ^expected
puts 'matched the pinned value'
end替代模式
使用 | 组合多个模式,即可在一个分支中匹配多个备选项中的任意一个。
case 'b'
in 'a' | 'b' | 'c'
puts 'in the first three letters'
end绑定整个匹配结果
使用 pattern => name 可以测试模式,并同时将匹配到的值绑定到一个名称。
case 'Ruby'
in String => word
puts(word.upcase)
endNoMatchingPatternError
如果没有任何 in 分支匹配,且不存在 else,Ruby 会引发 NoMatchingPatternError。请添加 else,以安全地处理其余情况。
case 10
in 1 then puts 'one'
else
puts 'no specific match'
end单行匹配
=> 运算符执行单行的向右赋值匹配,匹配失败时会引发错误。而 in 运算符会返回 true/false。
result = [1, 2] in [Integer, Integer]
puts result快速检查
如果 case/in 没有匹配的分支,也没有 else,会发生什么?
回顾:case/in 基础
您已经学会了结构匹配的基础知识:
case/in匹配形状,而不仅仅是相等性- 字面量、类型模式和
_通配符 - 变量绑定和固定运算符
^ - 使用
|和pattern => name表示替代模式 - 缺少匹配时会引发
NoMatchingPatternError
case 7
in Integer => n then puts(n * 2)
end常见问题解答
「case/in 基础」课时是免费的吗?
是的 — 「case/in 基础」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Ruby Academy 课程的其余内容,请升级到 CoddyKit PRO。 Ruby Academy 课程共包含 4 节课。
「case/in 基础」这节课中我会学到什么?
结构化匹配 你通过在浏览器中直接运行的动手代码来练习 Ruby Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Ruby Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Ruby Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「case/in 基础」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Ruby Academy 课中编写并运行代码吗?
能。每节 Ruby Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。