Rust 如何为包含函数类型别名的结构实现调试?
我有以下类型:Rust 如何为包含函数类型别名的结构实现调试?,rust,Rust,我有以下类型: type RangeFn = fn(&Value, &Value) -> bool; 现在我想把它和这个struct放在一起: #[derive(Debug)] struct Range { fun: RangeFn, } 但是如果我有一个struct将RangeFn作为参数,那么我似乎不能让它从Debug派生出来。如何使RangeFn与Debug特性兼容? 然而,这不是你想做的。您想要为范围实现调试,但不能通过派生来实现,因为fns不实现调试。
type RangeFn = fn(&Value, &Value) -> bool;
现在我想把它和这个struct
放在一起:
#[derive(Debug)]
struct Range {
fun: RangeFn,
}
但是如果我有一个struct
将RangeFn
作为参数,那么我似乎不能让它从Debug
派生出来。如何使RangeFn
与Debug
特性兼容?
然而,这不是你想做的。您想要为范围
实现调试
,但不能通过派生来实现,因为fn
s不实现调试
。
实际上,派生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);
}
type RangeFn=fn(&(),&())->bool;
结构范围{
乐趣:RangeFn,
其他_字段:u32,
}
范围的impl std::fmt::调试{
fn fmt(&self,f:&mut std::fmt::Formatter)->std::result::result{
f、 调试结构(“范围”)
.field(“其他字段”和self.other\u字段)
.finish()
}
}
fn main(){
设r=范围{
乐趣:| |,|真的,
其他字段:42,
};
println!(“{:?}”,r);
}
()我相信你的问题已经得到了和的回答。如果你不同意,请用你的问题来解释不同之处。否则,我们可以将此问题标记为已回答。TL;DR:你不能,你不能,这是出于设计。可能是@E_net4的重复。我认为他实际上不想在类型别名上实现
Debug
,而是在Range
上实现Debug
,这不能像通常那样简单地派生它。看起来有点像XY问题,谢谢!唯一的问题是,我想知道在打印函数时如何捕获它的签名。@maxander这在stable Rust中是不可能的。看,也许把你的用例放在那里,最近有一些活动。