有没有办法创建 std::slice::Iter 的类型别名?
Is there a way to create a type alias of a std::slice::Iter?
我正在尝试创建 Peekable
slice::Iter
的类型别名,但编译器一直抱怨我需要生命周期参数。
这个迭代器用在几个地方,并且总是迭代相同的类型。为了使代码更简洁,我想使用类型别名。
我已经尝试过(下面的代码示例):
- 向它正在迭代的结构添加生命周期参数,并将其作为参数传递给泛型,但无济于事。
- 在迭代器中添加生命周期参数
use std::{iter::Peekable, slice::Iter};
pub struct MyStruct {
pub arg1: i32,
pub arg2: i32,
pub arg3: MyEnum,
}
pub enum MyEnum {
Default,
}
// mutable since I want to call .peek() and .next() on my iterator
type MyIterator<'a> = &'a mut Peekable<Iter<MyStruct>>;
请注意,如果我不使用类型别名,即我直接在代码中使用它,上面的代码工作得很好:
pub fn my_fn(it: &mut Peekable<Iter<MyStruct>>) -> i32 { /* ... */ }
我不断收到以下错误:
error[E0106]: missing lifetime specifier
--> src/lib.rs:14:40
|
14 | type MyIterator<'a> = &'a mut Peekable<Iter<MyStruct>>;
| ^^^^^^^^^^^^^^ expected lifetime parameter
我也试过:
... = &'a Peekable<Iter<&'a MyStruct>>;
... = &'a Peekable<Iter<MyStruct+ 'a>>;
两者都不起作用,即使在 MyStruct
中添加生命周期参数也是如此。我真的不明白 Rust 要我如何定义生命周期参数。 (总的来说,我还没有完全理解这个概念,因为我刚开始用 Rust 编程)
我假设 Rust 只是在函数参数上下文中推断 Iter
的生命周期参数。但是作为 ,您可能使用的 Iter
被定义为 Iter<'a, T: 'a>
。正确的类型定义是:
type MyIterator<'a> = &'a mut Peekable<Iter<'a, MyStruct>>;
我正在尝试创建 Peekable
slice::Iter
的类型别名,但编译器一直抱怨我需要生命周期参数。
这个迭代器用在几个地方,并且总是迭代相同的类型。为了使代码更简洁,我想使用类型别名。
我已经尝试过(下面的代码示例):
- 向它正在迭代的结构添加生命周期参数,并将其作为参数传递给泛型,但无济于事。
- 在迭代器中添加生命周期参数
use std::{iter::Peekable, slice::Iter};
pub struct MyStruct {
pub arg1: i32,
pub arg2: i32,
pub arg3: MyEnum,
}
pub enum MyEnum {
Default,
}
// mutable since I want to call .peek() and .next() on my iterator
type MyIterator<'a> = &'a mut Peekable<Iter<MyStruct>>;
请注意,如果我不使用类型别名,即我直接在代码中使用它,上面的代码工作得很好:
pub fn my_fn(it: &mut Peekable<Iter<MyStruct>>) -> i32 { /* ... */ }
我不断收到以下错误:
error[E0106]: missing lifetime specifier
--> src/lib.rs:14:40
|
14 | type MyIterator<'a> = &'a mut Peekable<Iter<MyStruct>>;
| ^^^^^^^^^^^^^^ expected lifetime parameter
我也试过:
... = &'a Peekable<Iter<&'a MyStruct>>;
... = &'a Peekable<Iter<MyStruct+ 'a>>;
两者都不起作用,即使在 MyStruct
中添加生命周期参数也是如此。我真的不明白 Rust 要我如何定义生命周期参数。 (总的来说,我还没有完全理解这个概念,因为我刚开始用 Rust 编程)
我假设 Rust 只是在函数参数上下文中推断 Iter
的生命周期参数。但是作为 Iter
被定义为 Iter<'a, T: 'a>
。正确的类型定义是:
type MyIterator<'a> = &'a mut Peekable<Iter<'a, MyStruct>>;