如何为包含函数类型别名的结构实现Debug?

Max*_*der 1 rust

我有以下类型:

type RangeFn = fn(&Value, &Value) -> bool;
Run Code Online (Sandbox Code Playgroud)

现在我想用它来说struct:

#[derive(Debug)]
struct Range {
    fun: RangeFn,
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我有struct这需要RangeFn作为一个参数,然后我似乎无法把它从派生Debug.如何RangeFnDebug特质兼容?

mca*_*ton 6

您不能在您不拥有的类型上实现(或派生)您不拥有的特征.

但是,这不是你想要做的.你需要的是实现DebugRange,但你不能做到这一点,因为派生fn■不要执行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);
}
Run Code Online (Sandbox Code Playgroud)

(链接到游乐场)