#tuple #concepts #methods #length #proof #generic

duple

基于元组长度泛型的方法的概念库

1 个不稳定版本

0.0.1 2021 年 12 月 27 日

#134 in #tuple


用于 p-arse

GPL-3.0 许可证

11KB
256

duple

概念库,为元组字段添加方法,这些方法针对元组长度泛型,这允许在不使用宏的情况下保持代码长度 O(n),其中 n 是元组长度,而不是 O(n^2)(如果每个方法都需要为每个元组长度实现,则会是这样)• 还应该能够添加从两端弹出和推入元组以及从末尾删除 nth 个元素•操作元组的右端需要将元组从左侧包装,即 ((((), a), b), c)

所有方法都遵循相同的模式:它们接受一个实现了 TupleWrap 的类型,该类型具有所需的 'depth' 的 Wrapped 关联类型•在 'flat' 元组上调用 TupleWrap::wrap 返回相应的嵌套元组,即 (a, b, c) 转换为 (a, (b, (c, ())))•然后,一个针对嵌套元组的 'tail' 泛型函数删除第 n 层•删除第 n 层的嵌套元组然后解包为相应的 'flat' 元组

use duple::prelude::*;

// Special case — returns the last element, not a tuple!
assert_eq!(('a', 'b').rem0(), 'b');
assert_eq!(('a', 'b').rem1(), 'a');

assert_eq!(('a', 'b', 'c').rem0(), ('b', 'c'));
assert_eq!(('a', 'b', 'c').rem1(), ('a', 'c'));
assert_eq!(('a', 'b', 'c').rem2(), ('a', 'b'));

无运行时依赖