【发布时间】:2018-10-24 07:16:30
【问题描述】:
我很难理解 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 而不是&strs?为什么它的行为就好像它被有效地定义为那样?
【问题讨论】:
-
Iterator 的输出类型不是它的类型参数,而是它的
Item关联类型。 -
您将
Iterator(P) 的泛型参数与其Item关联类型混淆了。
标签: generics rust iterator traits associated-types