2 个稳定版本
1.1.0 | 2020 年 8 月 10 日 |
---|---|
1.0.0 | 2020 年 8 月 6 日 |
0.0.1 |
|
#1943 在 Rust 模式
73 每月下载量
用于 delayed-assert
17KB
403 行
truthy
检查一个值是否为 "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
功能,该功能将为实现Truthy
和Sized
的任何类型提供truthy_and
和truthy_or
函数。例如,true.truthy_and("It was truthy!")
返回Some("It was truthy!")
。您可以使用cargo run --features and-or --example and_or
运行示例。