0Pricing
Ruby Academy · 课时

查找模式与守卫

匹配中的条件

查找模式与守卫 是 CoddyKit 上的免费 Ruby Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Ruby Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Ruby Academy 课程共包含 4 节课。

守卫条件

为模式添加 if 或 unless 守卫。只有模式和条件都成功时,分支才会匹配。

case 7
in Integer => n if n.odd?
  puts 'odd integer'
end

守卫使用已绑定的变量

守卫可以引用由模式绑定的变量,因此您可以表达关于匹配数据的复杂条件。

case [4, 9]
in [a, b] if a < b
  puts 'ascending pair'
end

unless 守卫

unless 守卫会在条件为 false 时匹配,它与 if 的作用相反。

case 0
in Integer => n unless n.positive?
  puts 'zero or negative'
end

多个带守卫的分支

在多个分支中组合守卫,可以构建清晰的决策层次。

def grade(score)
  case score
  in Integer => s if s >= 90 then 'A'
  in Integer => s if s >= 70 then 'B'
  else 'C'
  end
end
puts(grade(85))

查找模式

查找模式 [*, x, *] 会在数组任意位置搜索子模式,两端使用 splat。

case [1, 2, 3, 4]
in [*, 3, *]
  puts 'contains a 3'
end

在查找模式中进行绑定

查找模式中的匹配元素可以进行绑定,从而捕获找到的值。

case [10, 20, 30]
in [*, x, *] if x > 25
  puts("found #{x}")
end

捕获周围元素

查找模式中的两个 splat 都可以命名,以捕获匹配项之前和之后的元素。

case [1, 2, 99, 4, 5]
in [*before, 99, *after]
  p before
  p after
end

查找指定类型的元素

查找模式可以与类型模式结合,用于定位给定类型的第一个元素。

case [1, 'hi', 2]
in [*, String => word, *]
  puts(word)
end

守卫与模式

在模式中表达能够通过结构表示的内容;对于模式无法捕获的条件(例如数值比较或方法调用),才使用守卫。

case { role: 'admin', age: 40 }
in { role: 'admin', age: } if age >= 18
  puts 'adult admin'
end

结合查找和守卫

将查找模式和守卫结合起来,可以询问:是否有任何元素满足这个条件?

numbers = [3, 5, 8, 11]
case numbers
in [*, n, *] if n.even?
  puts("first even-ish hit: #{n}")
end

分支顺序

分支会从上到下依次尝试;第一个匹配成功的分支获胜。请将更具体的带守卫模式放在通用模式之前。

case 100
in Integer => n if n > 50 then puts 'big'
in Integer then puts 'small'
end

快速检查

查找模式 [*, x, *] 的作用是什么?

回顾:查找模式和守卫

您为匹配添加了条件和搜索功能:

  • 守卫 if / unless 可以细化模式
  • 守卫可以使用已绑定的变量
  • 查找模式 [*, x, *] 会在任意位置进行搜索
  • 两个 splat 都可以命名,以捕获周围元素
  • 第一个匹配的分支获胜,因此顺序很重要
case [1, 7, 3]
in [*, x, *] if x > 5 then puts x
end

常见问题解答

「查找模式与守卫」课时是免费的吗?

是的 — 「查找模式与守卫」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Ruby Academy 课程的其余内容,请升级到 CoddyKit PRO。 Ruby Academy 课程共包含 4 节课。

「查找模式与守卫」这节课中我会学到什么?

匹配中的条件 你通过在浏览器中直接运行的动手代码来练习 Ruby Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Ruby Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Ruby Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「查找模式与守卫」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Ruby Academy 课中编写并运行代码吗?

能。每节 Ruby Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

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