6 个版本
0.0.5 | 2024 年 7 月 23 日 |
---|---|
0.0.4 | 2024 年 3 月 2 日 |
0.0.3 | 2024 年 1 月 29 日 |
0.0.2 | 2023 年 5 月 21 日 |
0.0.0 | 2022 年 1 月 16 日 |
937 在 Rust 模式 中排名
每月 203 次下载
用于 4 个 包(2 个直接使用)
26KB
496 行
可变参数
稳定 Rust 中的可变参数泛型
可变参数泛型?
可变参数泛型是 Rust 最受讨论的潜在特性之一。它们将使特质、函数和数据结构能够泛型化任意类型的可变长度元组。
目前,您只能为特定长度的元组实现泛型代码。如果想要处理不同长度的元组,必须为每种长度编写单独的实现。这导致 Rust 中的特质通常只能应用于长度最多为 12 的元组。
可变参数泛型允许泛型代码处理任何长度的元组。
元组列表
尽管可变参数泛型从根本上需要改变 Rust 编译器,但我们可以通过元组列表很好地模拟。
任何元组 (A, B, C, D)
都可以映射到(并从)递归元组 (A, (B, (C, (D, ()))))
。
每个元素由一个嵌套对 (Item, Rest)
组成,其中 Item
是元组元素,而 Rest
是列表的其余部分。对于最后一个元素,Rest
是一个单元元组 ()
。与常规平坦元组不同,这些递归元组可以在稳定 Rust 中有效推理。
您可能可以从Lisp中的cons
列表和Haskell中的HList
中认出这种基本结构。
该软件包将这些列表称为“可变列表”,并提供特性和宏以允许简单、高效地使用它们。
用法
var_expr!
创建可变值/表达式,var_type!
创建可变类型,而 var_args!
创建可变模式(用于解包参数、在let
声明左侧等)。
这些宏支持“扩展”语法 ...
,也称为“散列”。例如,var_expr!(a, ...var_b, ...var_c, d)
将将 a
、var_b
的项、var_c
的项和 d
连接成一个单独的可变列表。
致谢
该软件包基于VFLashM的 tuple_list
,它受MIT许可证许可
MIT许可证
Copyright (c) 2020 Valerii Lashmanov
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE
依赖关系
~290–740KB
~17K SLoC