Может ли статическая функция в признаке вызывать другую статическую функцию с той же характеристикой? - PullRequest
0 голосов
/ 15 июня 2019

Может ли статическая функция в признаке вызывать другую статическую функцию с той же характеристикой? Предположим, у меня есть черта ниже:

trait Test {
    fn prt() {
        println!("ok");
    }

    fn test() {
        Test::prt();
    }
}

Это не работает. Код просто не может компилироваться здесь.

Кроме того, я не могу использовать полный синтаксис, такой как <T as Test>::Test. Есть ли другой способ сделать это?

1 Ответ

1 голос
/ 15 июня 2019

Внутри определения черты вы можете использовать Self для ссылки на тип, который реализует черту. Для вас это будет выглядеть так:

trait Test {
    fn prt() {
        println!("ok");
    }

    fn test() {
        Self::prt();
    }
}

На самом деле нет такого метода, как Test::test, потому что его тело всегда определяется реализациями черты. Просто так получилось, что разработчики получат это тело по умолчанию, если они не предоставят свое собственное.

...