2015-06-17 83 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時,無論連接哪些模塊/包裝箱,都保證始終具有相同的行爲與,因爲任何事情都令人驚訝。在某些方面有各種各樣的建議來放鬆這些規則,但鐵鏽團隊非常注意避免使用獵槍。 –