我想知道是否有可能得到这个编译。使用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 .:您的印象不正确。 –