代码之家  ›  专栏  ›  技术社区  ›  magu_

为什么tuple格式被限制为12项生锈?

  •  5
  • magu_  · 技术社区  · 6 年前

    我刚开始 tutorial in 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`
    }
    

    在我无知的观点下,通过迭代整个元组可以很容易地实现打印,这将允许在没有大小限制的情况下显示。如果解决方案如此简单,它将被实现,那么我在这里缺少什么呢?

    2 回复  |  直到 6 年前
        1
  •  11
  •   mcarton    6 年前

    打印元组当前是使用 macro that only works up to 12 elements .

    提出了静态迭代/操作元组的功能,但已被推迟(参见 this RFC )对于这些实现有一些顾虑(例如,您希望能够获得元组的head&tail,但实际上无法保证将以与指定顺序相同的顺序存储元组,因为编译器可以针对空间进行优化,这意味着获取tail并不是一个简单的操作)。

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

    let mixed = (42, true, 3.14, "foo");
    

    如果这个元组的所有元素都有不同的类型,您将如何迭代它?这不能简单地用正则迭代器和 for 循环。您将需要一些新的类型级语法,而Rust目前还缺少这种语法。

        2
  •  2
  •   Tim Diekmann suresh madaparthi    6 年前

    Debug 只是 implemented 在最多12个元素的元组上。这就是为什么打印 short 作品,但 long 失败。