Можно ли объединить границы вложенных ассоциированных типов? - PullRequest
0 голосов
/ 10 июня 2018

Я работаю с несколькими чертами, которые имеют связанные типы:

trait Foo {
    type FooType;
}

trait Bar {
    type BarType;
}

trait Baz {
    type BazType;
}

У меня есть функция, в которой мне нужно связать эти связанные типы.Я могу сделать это так ( Детская площадка ):

fn do_the_thing<T>(_: T)
where
    T: Foo,
    T::FooType: Bar,
    <T::FooType as Bar>::BarType: Baz,
    <<T::FooType as Bar>::BarType as Baz>::BazType: Clone,
{}

Это работает, но очень многословно.Одна проблема заключается в том, что мне нужно использовать синтаксис <Type as Trait> для устранения неоднозначности нескольких путей, хотя в этом нет необходимости.Об этой проблеме уже сообщалось здесь .

Интересно, возможно ли сократить определение вышеупомянутой функции.Я подумал, может быть, возможно объединить все границы в одну:

fn do_the_thing<T>(_: T)
where
    T: Foo<FooType: Bar<BarType: Baz<BazType: Clone>>>,
{}

Но это приводит к синтаксической ошибке:

error: expected one of `!`, `(`, `+`, `,`, `::`, `<`, or `>`, found `:`
  --> src/main.rs:16:19
   |
16 |     T: Foo<FooType: Bar<BarType: Baz<BazType: Clone>>>,
   |                   ^ expected one of 7 possible tokens here

Есть ли способ сжатия границкак-то?

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