0Pricing
Ruby Academy · 课时

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'
end

case/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)
end

NoMatchingPatternError

如果没有任何 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. case/in 基础
  2. 数组与哈希模式
  3. 查找模式与守卫
  4. 实际应用场景
← 返回 Ruby Academy