Rust 关联类型上的边界,但';错误:此值的类型在此上下文中必须是已知的';

Rust 关联类型上的边界,但';错误:此值的类型在此上下文中必须是已知的';,rust,Rust,以下 使用标准::借用::借用; 类似自我的特质::ItemsIterator; fn get(&self,key:&Q)->选项> where Self::标签:借用{ 对于self.items()中的(k,v){ 如果k.借用().eq(键){ 返回一些(v); } } 没有一个 } } 错误输出为 lib.rs:12:16: 12:26 error: the type of this value must be known in this context lib.rs:12

以下

使用标准::借用::借用;
类似自我的特质::ItemsIterator;
fn get(&self,key:&Q)->选项>
where Self::标签:借用{
对于self.items()中的(k,v){
如果k.借用().eq(键){
返回一些(v);
}
}
没有一个
}
}
错误输出为

lib.rs:12:16: 12:26 error: the type of this value must be known in this context
lib.rs:12             if k.borrow().eq(key) {
                         ^~~~~~~~~~

为什么??
ItemsIterator
的类型绑定和绑定的
Self::Label:Borrow
是否提供了必要的类型信息?

这似乎是一个bug:
{
类型ItemsIterator:Iterator;
fn items(&self)->self::ItemsIterator;
fn获取(&self){
对于self.items()中的k{}
}
}
这在功能上与原始代码没有什么不同,只是它可以编译。(我自由地将
.eq
调用切换到
=
操作符,这对于方法调用来说是更好的选择。)

此外,如果您想多尝试一下迭代器,可以编写
get
as

x.items()
 .find(|&(k,_)| k.borrow() == key)
 .map(|(_, v)| v)

使用和。

嗯,当rust GitHub repo的所有者说这是一个bug时,很可能是一个bug。谢谢你的变通方法和额外的启发性说明!
x.items()
 .find(|&(k,_)| k.borrow() == key)
 .map(|(_, v)| v)