2 个稳定版本

1.1.0 2020 年 8 月 10 日
1.0.0 2020 年 8 月 6 日
0.0.1 2020 年 8 月 6 日

#1943Rust 模式

Download history 15/week @ 2024-03-11 8/week @ 2024-03-18 9/week @ 2024-03-25 59/week @ 2024-04-01 14/week @ 2024-04-08 5/week @ 2024-04-15 18/week @ 2024-04-22 21/week @ 2024-04-29 5/week @ 2024-05-06 4/week @ 2024-05-13 5/week @ 2024-05-20 20/week @ 2024-05-27 38/week @ 2024-06-03 10/week @ 2024-06-10 9/week @ 2024-06-17 13/week @ 2024-06-24

73 每月下载量
用于 delayed-assert

MIT/Apache

17KB
403

truthy

Crates.io Docs.rs Crates.io Build Status

检查一个值是否为 "truthy"

行为

// non-zero numbers are truthy
0u32.truthy() // false
0f32.truthy() // false
1u32.truthy() // true
1f32.truthy() // true

// empty strings are not truthy
"".truthy() // false
" ".truthy() // true

// Options are truthy if not None and their value is truthy
let none: Option<()> = None;
let falsy_inner = Some(false);
let truthy_inner = Some(true);
none.truthy() // false
falsy_inner.truthy() // false
truthy_inner.truthy() // true

// Results are truthy if Ok and value is truthy
let falsy_err: Result<(), _> = Err(false);
let truthy_err: Result<(), _> = Err(true);
let falsy_ok: Result<_, ()> = Ok(false);
let truthy_ok: Result<_, ()> = Ok(true);

falsy_err.truthy() // false
truthy_err.truthy() // false
falsy_ok.truthy() // false
truthy_ok.truthy() // true

// Empty vecs and arrays are falsy
let empty_array: [();0] = [];
let empty_vec: Vec<()> = Vec::new();

empty_array.truthy() // false
empty_vec.truthy() // false

// The truthy behavior of arrays and vecs also applies to tuples from size 0 to 12
let empty_tuple = ();
let not_empty_tuple = (1, "2", '3');
empty_tuple.truthy() // false
not_empty_tuple.truthy() // true

truthy!

let my_bool = x.truthy() && y.truthy() || !z.truthy();

上面的代码可能有点烦人,需要多次重复 .truthy()truthy! 宏会自动添加 .truthy() 以节省您的时间。

let my_bool = truthy!(x && y || !z);

您可以使用 cargo run --example truthy_macro 来运行 示例

限制

truthy! 宏不能接受非布尔表达式。在 truthy! 中,唯一的有效标记是 ()!&&|| 和身份。例如,以下代码将无法编译。

truthy!(Some(1).unwrap() && 0 + 1);

要解决这个问题,您需要在使用 truthy! 之前分配表达式。

let x = Some(1).unwrap();
let y = 0 + 1;
truthy!(x && y);

特性

and-or

这个包具有一个and-or功能,该功能将为实现TruthySized的任何类型提供truthy_andtruthy_or函数。例如,true.truthy_and("It was truthy!")返回Some("It was truthy!")。您可以使用cargo run --features and-or --example and_or运行示例

依赖关系