相关疑难解决方法(0)

<>语法与常规生命周期绑定有何不同?

请考虑以下代码:

trait Trait<T> {}

fn foo<'a>(_b: Box<dyn Trait<&'a usize>>) {}
fn bar(_b: Box<dyn for<'a> Trait<&'a usize>>) {}
Run Code Online (Sandbox Code Playgroud)

这两个函数foobar似乎接受Box<Trait<&'a usize>>,虽然foo比更简明做它bar.他们之间有什么区别?

另外,在什么情况下我需要for<>像上面那样的语法?我知道Rust标准库在内部使用它(通常与闭包有关),但为什么我的代码需要它呢?

rust

56
推荐指数
1
解决办法
4267
查看次数

在Rust中,矢量是迭代器吗?

是否准确地说明一个向量(以及其他集合类型)是一个Iterator

例如,我可以通过以下方式循环遍历向量,因为它实现了Iterator特征(据我所知):

let v = vec![1, 2, 3, 4, 5];

for x in &v {
    println!("{}", x);
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我想使用属于Iterator特征的函数(例如fold,mapfilter),为什么我必须首先调用iter()该向量?

我的另一个想法是,可能会将矢量转换为a Iterator,在这种情况下,上面的语法更有意义.

iterator rust

13
推荐指数
1
解决办法
6214
查看次数

为什么&str没有实现IntoIterator?

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

基本上根据这个问题,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)

rust

2
推荐指数
1
解决办法
235
查看次数

标签 统计

rust ×3

iterator ×1