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