Почему в сигнатуре std :: str :: parse не используется граница черты? - PullRequest
0 голосов
/ 13 мая 2018

Подпись метода parse для примитивного типа str в Rust

pub fn parse<F>(&self) -> Result<F, <F as FromStr>::Err>

Почему это не так, как показано ниже?

pub fn parse<F: FromStr>(&self) -> Result<F, F::Err>

Я подумал, что, возможно, примитивприведение будет гарантировать, что Err разрешает до FromStr::Err, а не SomeOtherTrait::Err.

Тем не менее, учитывая следующую строку в документации parse ...

синтаксический анализ может анализировать любой тип, который реализует черту FromStr

Почемунет никаких признаков?

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

<F as FromStr>::Err означает связанный тип Err из F реализации FromStr.

Почему это не так, как показано ниже?

pub fn parse<F: FromStr>(&self) -> Result<F, F::Err>

Поскольку F может реализовывать много разных черт, у каждого из которых может быть свой связанный тип Err. Этот синтаксис гарантирует, что он получает тип, специально связанный с реализацией F FromStr.

0 голосов
/ 13 мая 2018

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

pub fn parse<F>(&self) -> Result<F, <F as FromStr>::Err>
where
    F: FromStr,
...