为什么 Rust 中的元组格式限制为 12 项?

问题描述 投票:0回答:2

我刚刚开始学习 Rust 教程,但我无法理解元组打印的限制:

fn main() { // Tuple definition let short = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11); let long = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); println!("{:?}", short); // Works fine println!("{:?}", long); // ({integer}...{integer})` cannot be formatted using `:?` because it doesn't implement `std::fmt::Debug` }

在我无知的观点中,通过迭代整个元组可以轻松实现打印 - 这将允许显示而不受大小限制。如果解决方案这么简单就可以实现,我在这里错过了什么?

printing rust tuples
2个回答
21
投票
打印元组当前使用

宏实现,最多只能处理 12 个元素

静态迭代/操作元组的功能已经被提出,但已被推迟(例如参见

this RFC)。对于这些的实现存在一些担忧(例如,您希望能够获取元组的头和尾部,但实际上不能保证元组将以与您指定的顺序相同的顺序存储,因为编译器可以优化空间,这意味着获取尾部并不是一个简单的操作)。

至于为什么您需要特殊支持,请考虑以下元组:

let mixed = (42, true, 3.14, "foo");
考虑到该元组的所有元素都具有不同的类型,您将如何迭代该元组?这不能简单地使用常规迭代器和 

for

 循环来完成。您需要一些新的类型级语法,而 Rust 目前缺乏这种语法。


3
投票
© www.soinside.com 2019 - 2024. All rights reserved.