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中是不可能的。看,也许把你的用例放在那里,最近有一些活动。