Мне трудно понять, как работает тип Split
в Rust.
Split<'a, P> where P: Pattern<'a>
- это тип, возвращаемый методом std::string::String::split
. Тип имеет реализацию для Iterator<'a, P>
, где P
по-прежнему является типом Pattern
, но в действительности (и, как я ожидал), Iterator
возвращает только &str
фрагментов.
Например, split(p).collect::<Vec<&str>>()
работает, но split(p).collect::<Vec<char>>()
приводит к ошибке компиляции. Это то, чего я ожидал бы, но я не понимаю, как это происходит, поскольку Pattern
имеет реализации как для &str
, так и для char
.
Почему тип Split
не определяется просто как Split<'a, &'a str>
, поскольку он фактически Iterator
более &str
с? Почему он ведет себя так, как будто он так определен?