mag*_*gu_ 7 printing tuples rust
我刚刚在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`
}
Run Code Online (Sandbox Code Playgroud)
在我无知的观点中,通过迭代整个元组可以很容易地实现打印 - 这将允许在没有大小限制的情况下进行显示.如果解决方案很简单就会实现,我在这里缺少什么?
mca*_*ton 13
目前使用最多只能处理12个元素的宏来实现打印元组.
已经提出了静态迭代/操纵元组的功能,但是已被推迟(参见例如此RFC).关于这些的实现存在一些担忧(例如,您希望能够获得元组的头部和尾部,但实际上并不能保证元组将按照您指定的顺序存储,因为允许编译器优化空间,这意味着获得尾部不会是一个简单的操作).
至于为什么需要特殊支持,请考虑以下元组:
let mixed = (42, true, 3.14, "foo");
Run Code Online (Sandbox Code Playgroud)
如果它的所有元素都有不同的类型,你将如何迭代这个元组?这不能简单地使用常规迭代器和for循环来完成.你需要一些新的类型级语法,Rust目前缺乏这种语法.