2015-06-17 49 views
5

I gather Rust为数组大小为32或更小的数组提供Debug impl。为大型阵列类型实现调试特征

我也gather,我可以通过使用write!与一个非常长的格式说明符在更大的阵列上实现调试。但我想知道是否有更好的方法。

对于一个长度为1024的数组实现Debug的推荐方法是什么?

+0

我想说完全取决于你的用例,我曾经遇到过需要查看每个数据的最后一个值的情况,有时候写出一些有关数据的统计数据就足够了,毕竟这是你的数据。 – llogiq

+0

好点,当我等待答案的时候,我就是这么做的,打印了一些重要的信息,但是我仍然好奇是否有一种很好的方法来打印整个阵列。 – user12341234

+3

你不需要一个非常长的格式 - 任何数组都可打印为一个片段。 – bluss

回答

7
use std::fmt; 

struct Array<T> { 
    data: [T; 1024] 
} 

impl<T: fmt::Debug> fmt::Debug for Array<T> { 
    fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { 
     self.data[..].fmt(formatter) 
    } 
} 

fn main() { 
    let array = Array { data: [0u8; 1024] }; 

    println!("{:?}", array); 
} 

不可能为[T; 1024]或一些具体类型的数组(即[u8; 1024])。对于其他包装箱的类型实现其他包装箱的特性,或者实现另一个包装箱的特性,这两种特性都不是设计允许的,

+0

有趣的设计选择,是否有理由记录在任何地方?无论如何,感谢您的答案,这是肯定的可接受的情况下。 – user12341234

+2

@ user12341234:这被称为“一致性规则”,其基本原理是保证在为'Struct'使用'Trait'的impl时,无论连接哪些模块/包装箱,都保证始终具有相同的行为与,因为任何事情都令人惊讶。在某些方面有各种各样的建议来放松这些规则,但铁锈团队非常注意避免使用猎枪。 –