为什么&str没有实现IntoIterator?

Ale*_*lex 2 rust

我正在编写一个以通用方式实现前缀树的容器(键和值是通用参数).由于这个数据结构的性质,我需要密钥来拥有一个迭代器.

基本上根据这个问题,IntoIterator特征是造成这种可能性的原因,但并非所有结构都能实现它.例如&str,String不要实现它.

在这种情况下,如果IntoIterator标准类型没有实现,我该怎么办?

预期的API是

let mut t1 = Trie::new();
t1.insert(String::from("this"), 1);

let mut t2 = Trie::new();
t2.insert(vec![1, 2, 3], 1);
Run Code Online (Sandbox Code Playgroud)

Ale*_*sev 6

这个问题Stringstr是他们有两种类型的迭代器- chars()-迭代器来UTF-8字符和bytes()-在字节迭代器.这就是为什么不可能IntoIterator为这些类型实现的原因.你必须创建两个包装器(或选择其中一个)

struct ByteString(String)
struct Utf8String(String)
Run Code Online (Sandbox Code Playgroud)

IntoIterator为他们实施.