Вы не можете реализовать (или получить) черту, которой вы не владеете, для типа, который вам не принадлежит.
Однако это не то, что вы хотите сделать.То, что вы хотите, это реализовать Debug
для Range
, но вы не можете сделать это, производя, потому что fn
s не реализует Debug
.Действительно, для получения Debug
требуется, чтобы все поля были также Debug
.Тогда вы застряли с реализацией Debug
самостоятельно;В конце концов, это просто нормальная черта:
type RangeFn = fn(&(), &()) -> bool;
struct Range {
fun: RangeFn,
other_field: u32,
}
impl std::fmt::Debug for Range {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::result::Result<(), std::fmt::Error> {
f.debug_struct("Range")
.field("other_field", &self.other_field)
.finish()
}
}
fn main() {
let r = Range {
fun: |_, _| true,
other_field: 42,
};
println!("{:?}", r);
}
( ссылка на игровую площадку )