2 个版本
0.1.1 | 2021 年 8 月 24 日 |
---|---|
0.1.0 | 2021 年 8 月 24 日 |
#2193 在 Rust 模式
每月 72 次下载
用于 8 个crate (4 个直接)
44KB
484 行
用于操作元组的实用库。
功能
-
测试所有元素是否为
Ok
:all_ok()
assert_eq!( all_ok((good(1), good(2), good(3))), Ok((1, 2, 3)), ); assert_eq!( all_ok((good(1), bad(2), good(3))), Err((Ok(1), Err(2), Ok(3))) );
-
测试所有元素是否为
Some
:all_some()
assert_eq!( all_some((Some(1), Some(2), Some(3))), Ok((1, 2, 3)) ); assert_eq!( all_some((Some(1), Option::<()>::None, Some(3))), Err((Some(1), None, Some(3))) );
-
将元素添加到元组开头:
prepend()
assert_eq!( prepend(1, (2, 3, 4)), (1, 2, 3, 4) );
-
将元素添加到元组末尾:
append()
assert_eq!( append((1, 2, 3), 4), (1, 2, 3, 4) );
-
连接两个元组:
concat_tuples()
assert_eq!( concat_tuples((1, 2), (3, 4, 5)), (1, 2, 3, 4, 5) );
-
连接多个元组:
concat_many()
assert_eq!( concat_many(((), (1,), (2, 3,), (4, 5, 6))), (1, 2, 3, 4, 5, 6) );
-
将元组的引用转换为引用元组:
ref_tuple()
assert_eq!( ref_tuple(&(1, 2, 3)), (&1, &2, &3) );
-
将可变元组的引用转换为可变引用元组:
tuple_ref_mut()
assert_eq!( tuple_ref_mut(&mut (1, 2, 3)), (&mut 1, &mut 2, &mut 3) );
-
提取元组的第一个元素:
unprepend()
assert_eq!( unprepend((1, 2, 3, 4)), (1, (2, 3, 4)) );
-
提取元组的最后一个元素:
unappend()
assert_eq!( unappend((1, 2, 3, 4)), ((1, 2, 3), 4) );
-
以元组成员作为参数调用函数:
apply()
fn add3(a: u32, b: u32, c: u32) -> u32 { a + b + c } let tpl3 = (1, 2, 3); assert_eq!( apply(&add3, tpl3), 6 );
-
将元组的元素逐个包装在
Option
中:option_tuple()
assert_eq!( option_tuple(Some((1, 2, 3))), (Some(1), Some(2), Some(3)) );
-
获取元组的长度:
length()
assert_eq!(<(u8, u16, u32) as TupleLength>::LENGTH, 3);
-
映射元组:
map_tuple()
struct MyTupleEnum(usize); impl TupleMapper for MyTupleEnum { type MapElem<Type> = (usize, Type); fn map_elem<Elem>(&mut self, elem: Elem) -> Self::MapElem<Elem> { let index = self.0; self.0 += 1; (index, elem) } } assert_eq!( map_tuple(MyTupleEnum(1), ("hello", "world", "!")), ((1, "hello"), (2, "world"), (3, "!")), )
支持的元组长度
默认情况下,选定的操作适用于长度为16个元素的元组(features = ["default-len"]
)。
您可以通过使用feature = ["X"]
来指定更高的限制,其中X
可以是8、16、32、64、96、128、160、192、224或256。较大的数字包含所有较小的数字。
依赖关系
~1.5MB
~36K SLoC