我想知道是否有可能得到這個編譯。使用Formatter :: debug_list來實現一個二維數組的調試
impl<T: fmt::Debug> fmt::Debug for Array2<T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let ref mut builder = f.debug_list();
self.rows().fold(builder, |b, e| b.entry(e)).finish()
}
}
self.rows
是產生&[T]
的迭代器。
這裏的錯誤是大中未對[T]
在b.entry(e)
的背景下,因爲前面提到的迭代器產量&[T]
這是奇怪的實現。
我無法弄清楚,部分是因爲我無法理解這裏涉及的函數簽名。
fn entry(self, entry: &Debug) -> DebugList<'a, 'b>
請注意&Debug
。
然而,相關文檔示例將引用&i32
傳遞給構建器。
struct Foo(Vec<i32>);
impl fmt::Debug for Foo {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
self.0.iter().fold(fmt.debug_list(), |b, e| b.entry(e)).finish()
}
}
有了這麼多的困惑,必須有一些有趣的東西來學習。
期望的輸出將是類似於[[1, 2], [3, 4]]
。
一個類似的例子,任何人都可以編譯:
use std::fmt;
fn fmt<T: fmt::Debug>(vec: &Vec<T>, f: &mut fmt::Formatter) -> fmt::Result {
let ref mut builder = f.debug_list();
vec.chunks(4).fold(builder, |b, e| b.entry(e)).finish()
}
看起來像我的鏽是有點生疏。我的印象是,「特質」只能用明確的演員來構建。 –
@ A.B .:您的印象不正確。 –