此问题基于this code from the url crate。
extend
方法在带有对象的元组上接收一个迭代器,这些对象可能作为&str
借用。
fn extend<I, K, V>(iter: I)
where
I: IntoIterator,
I::Item: Borrow<(K, V)>,
K: AsRef<str>,
V: AsRef<str>
{
{
for key in iter {
let (ref k, ref v) = key.borrow();
append(k.as_ref(), v.as_ref());
}
}
}
我希望extend
方法处理(&str, Option<&str>)
元组上的迭代器。我尝试了不同的变体,例如:
fn extend<I, K, V>(iter: I)
where
I: IntoIterator,
I::Item: Borrow<(K, Option<V>)>,
K: AsRef<str>,
V: AsRef<str>
但是我不知道它是如何工作的。
如何向编译器解释我想要什么?
答案 0 :(得分:0)
您不需要在元组中引用:
fn extend<I, K, V>(iter: I)
where
I: IntoIterator,
I::Item: Borrow<(K, V)>,
K: AsRef<str>,
V: AsRef<str>,
{
for key in iter {
let (k, v) = key.borrow();
append(k.as_ref(), v.as_ref());
}
}
fn extend2<I, K, V>(iter: I)
where
I: IntoIterator<Item = (K, Option<V>)>,
K: AsRef<str>,
V: AsRef<str>,
{
for (k, v) in iter {
append3(k, v);
}
}