专业的编程技术博客社区

网站首页 > 博客文章 正文

Rust中巧用matches!宏(rust腐蚀免费版)

baijin 2024-09-11 00:55:35 博客文章 8 ℃ 0 评论

Rust1.4.2版本的更新指南中,提到一个更新了宏 matches!。我们一起来了解下

是的,其实就是我们常用到的match表达式,只是在使用matches!宏表达起来更简洁。

我们将上面的例子单拆出来说下,大家可能就一目了然了。

例子1

如果我们想表达这段匹配的模式,

'A'..='Z' | 'a'..='z' | '0'..='9'

那用match该怎么描述呢? 上代码:

实际上,get_foo匹配到其中一个模式后,返回true,未匹配到返回fasle

例子2

匹配到Some(x) if x > 2的值代码如下,其中这里的匹配模式:匹配守卫 if x > 2

  • Some(x)pattern匹配模式
  • if x > 2 表示guard的匹配守卫(match guard)
  • 关于匹配守卫的详细请参考链接:https://doc.rust-lang.org/stable/book/ch18-03-pattern-syntax.html#extra-conditionals-with-match-guards

这里的get_bar 匹配其中一个模式后,返回true,未匹配到返回fasle

好了,我们看了上面两个例子后,大概就能明白matches!宏的大致使用了。

matches!(expr,pattern)
  • expr:是指条件判断的入参
  • pattern 是期待为true的匹配模式。

演进

知道了matches!宏的原理,那我们自己推导一个类似该matches!宏的自定义matche_map函数。

  • 接收一个闭包,返回bool类型函数,代码大致如下:

那我们看看怎么调用:

这里的match_map调用本质上类似上面的match匹配,上面列子做为参考演示下大致逻辑。

matches! 实现

我们来看下matches!的实现

  • match匹配expression表达式
  • pattern为匹配模式
  • guard用?表示可能存在
  • match 匹配上的模式返回true,其他返回false

总结

matches!宏极大简化了代码量,表达上直接。赶快将它用于你的Rust的代码中吧。墙裂推荐

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表