#macro #error #error-message #assert #return #returning #condition

check

便捷的 assert!-like 宏,返回而不是崩溃

1 个稳定版本

1.0.0 2022 年 3 月 17 日
0.1.0 2017 年 5 月 7 日

#1689Rust 模式

Download history 2/week @ 2024-02-28 13/week @ 2024-03-27 20/week @ 2024-04-03 10/week @ 2024-04-10 4/week @ 2024-04-24 24/week @ 2024-05-01

59 每月下载量
divisibility_check 中使用

MIT/Apache

8KB
89

Check

便捷的 assert!-like 宏,立即返回 NoneErr(...) 而不是崩溃。

在一个返回 Option<T> 的函数中,只需传递足够的参数来得到一个需要检查的条件。

check!(a < n);
check_eq!(a, b);

这将扩展为

if !(a < n) {
  return None;
}
if a != b {
  return None;
}

在一个返回 Result<T, E> 的函数中,调用宏时需要额外一个参数,这是检查失败时返回的错误(必须具有类型 E),就像你可以添加参数来选择 panic 消息一样,使用 assert!

check!(a < n, MyError::TooBig);
check_eq!(a, b, MyError::NotEqual);

这将扩展为

if !(a < n) {
  return Err(MyError::TooBig);
}
if a != b {
  return Err(MyError::NotEqual);
}

lib.rs:

便捷的 assert!-like 宏,立即返回 NoneErr(...) 而不是崩溃。

示例

在一个返回 Option<T> 的函数中,只需传递足够的参数来得到一个需要检查的条件。

check!(a < n);
check_eq!(a, b);

这将扩展为

if !(a < n) {
  return None;
}
if a != b {
  return None;
}

在一个返回 Result<T, E> 的函数中,调用宏时需要额外一个参数,这是检查失败时返回的错误(必须具有类型 E),就像你可以添加参数来选择 panic 消息一样,使用 assert!

check!(a < n, MyError::TooBig);
check_eq!(a, b, MyError::NotEqual);

这将扩展为

if !(a < n) {
  return Err(MyError::TooBig);
}
if a != b {
  return Err(MyError::NotEqual);
}

注意

实际上,以下两行相当等效

check!(a <= b);
(a <= b).then(|| ())?;

无运行时依赖