3个稳定版本
| 1.0.2 | 2024年2月22日 |
|---|---|
| 1.0.1 | 2024年2月19日 |
416 在 过程宏 中排名
每月78次下载
16KB
359 行
guard_macros
此库提供了一个名为 guard! 的宏,用于替换重复的 let-else 和 if 语句。
有关文档,请参阅Rustdoc
lib.rs:
使用方法
// returns when (expr) is evaluated to false
guard!( (expr) );
// returns when refuted (i.e. (expr) doesn't match (pat))
guard!( (pat) = (expr) );
// panics instead of returning (called "Refute Handler")
guard!( (expr) => panic!("false") );
guard!( (pat) = (expr) => panic!("refuted") );
guard! {
// can be repeated
(expr),
(pat) = (expr) => panic!("refuted"),
// can be scoped and nested
{
(expr),
(pat) = (expr),
{
(expr),
(pat) = (expr) => panic!("baz"),
} => _, // inherit refute handler
} => panic!("foo"),
}
概述
guard_macros 提供了两个宏
guard!用于替换重复的let-else和if语句。make_guard!用于定义具有不同默认 Refute Handlers 的新守护宏。
Refute Handler
"Refute Handler" 是当子句条件不满足时执行的语句。可以通过添加 => 后跟一个表达式来指定,可以是
- 单个子句
guard! { (pat) = (expr) => panic!("refuted"), (expr) => panic!("false"), } - 也可以是使用
{}括起来的子句组。guard! { { (pat) = (expr), (expr), } => panic!("unmet") }注意:默认情况下,块会创建一个新的作用域,但可以通过在开括号前添加
*来禁用。
示例
规范
-
语法
GuardBody :
GuardDecl (,GuardDecl )*,?GuardDecl :
*?{GuardBody}RefuteHandlerInheritable
| GuardClause RefuteHandler?GuardClause :
PatternNoTopAlt=Expression
| ExpressionRefuteHandler :
=>ExpressionRefuteHandlerInheritable :
RefuteHandler
|=>_ -
语法
MakeGuardBody :
MakeGuardDecl (,MakeGuardDecl )*,?MakeGuardDecl :
Identifier RefuteHandler
Dependencies
~250–690KB
~16K SLoC