Как мне реализовать Debug для структуры, содержащей псевдоним типа функции? - PullRequest
0 голосов
/ 26 августа 2018

У меня есть следующий тип:

type RangeFn = fn(&Value, &Value) -> bool;

Теперь я хочу поставить это с этим struct:

#[derive(Debug)]
struct Range {
    fun: RangeFn,
}

Но если у меня есть struct, который берет RangeFn как параметр, тогда я не могу получить его из Debug.Как мне сделать RangeFn совместимым с чертой Debug?

1 Ответ

0 голосов
/ 26 августа 2018

Вы не можете реализовать (или получить) черту, которой вы не владеете, для типа, который вам не принадлежит.

Однако это не то, что вы хотите сделать.То, что вы хотите, это реализовать 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);
}

( ссылка на игровую площадку )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...