2015-06-17 1 views
5

I gather, что Rust обеспечивает отладку impl для массивов размером 32 и меньше.Внедрить свойство отладки для большого массива

Я также gather, что я мог бы реализовать Debug для большего массива, просто используя write! с очень длинным спецификатором формата. Но мне интересно, есть ли лучший способ.

Какой рекомендуемый метод реализации Debug для массива длины, скажем, 1024?

+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); 
} 

Невозможно реализовать Debug для [T; 1024] или некоторый массив конкретного типа (т. Е. [U8; 1024]. Реализация черт из других ящиков для типов из других ящиков или реализация признака из другого ящика для общего типа не допускаются по дизайну,

+0

Интересный выбор дизайна, рациональный документированный где угодно? В любом случае, спасибо за ответ, это, безусловно, приемлемо с учетом обстоятельств , – user12341234

+2

@ user12341234: Это известно как «правила согласованности», и обоснование заключается в том, чтобы гарантировать, что при использовании функции «Trait» для «Struct» вы всегда будете иметь одинаковое поведение независимо от того, какие модули/ящики связаны с, потому что все остальное удивляет. Были различные предложения, чтобы немного смягчить эти правила, но команда Rust очень внимательна, чтобы избежать педалей. –

Смежные вопросы