我想知道是否可能使其编译。
请注意
然而,相关文档示例将引用
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]
。
出错的原因在于在 b.entry(e)
的上下文中,[T]
没有实现 Sized 特性,这很奇怪,因为如前所述,迭代器产生的是 &[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()
}