Types 进入vs在线算法迭代器
我正在写一个在线算法,用一系列函数实现,这些函数接受迭代器并生成迭代器 当我编写这样的函数时,内容更加复杂,但在类型上没有区别:Types 进入vs在线算法迭代器,types,rust,iterator,Types,Rust,Iterator,我正在写一个在线算法,用一系列函数实现,这些函数接受迭代器并生成迭代器 当我编写这样的函数时,内容更加复杂,但在类型上没有区别: fn decode<'a, T>(input: T) -> impl Iterator<Item = i16> + 'a where T: Iterator<Item = &'a u8> + 'a, { input.map(|b| i16::from(*b)).filter(|i| *i != 0) }
fn decode<'a, T>(input: T) -> impl Iterator<Item = i16> + 'a
where
T: Iterator<Item = &'a u8> + 'a,
{
input.map(|b| i16::from(*b)).filter(|i| *i != 0)
}
看
但是,这会使调用函数变得不合理:
let input: Vec<u8> = vec![1, 2, 3, 0];
let v: Vec<i16> = decode(input.iter()).collect();
我更喜欢使用T:Into-src/main.rs:1:1
|
1 |/fn解码+'静态`
=注意:要了解更多信息,请访问
=注意:`std::convert::Into'需要`
为什么会这样,还有更好的方法吗?改用:
错误[E0277]:编译时无法知道'dyn std::iter::Iterator+'static'类型的值的大小
->src/lib.rs:1:12
|
1 | fn示例:迭代器{}
|^在编译时没有已知的大小
|
=帮助:特性'std::marker::Sized'未为'dyn std::iter::Iterator+'静态实现`
=注意:要了解更多信息,请访问
=注意:所有局部变量必须具有静态已知的大小
=帮助:未设置大小的局部变量被选通为不稳定的功能
定义如下:
pub trait Into<T> {
fn into(self) -> T;
}
实现到的东西必须具有函数fn intoself->dyn Iterator,返回一个trait。由于trait没有大小,因此它还不能返回、存储在变量中或作为参数接受
另见:
改用:
错误[E0277]:编译时无法知道'dyn std::iter::Iterator+'static'类型的值的大小
->src/lib.rs:1:12
|
1 | fn示例:迭代器{}
|^在编译时没有已知的大小
|
=帮助:特性'std::marker::Sized'未为'dyn std::iter::Iterator+'静态实现`
=注意:要了解更多信息,请访问
=注意:所有局部变量必须具有静态已知的大小
=帮助:未设置大小的局部变量被选通为不稳定的功能
定义如下:
pub trait Into<T> {
fn into(self) -> T;
}
实现到的东西必须具有函数fn intoself->dyn Iterator,返回一个trait。由于trait没有大小,因此它还不能返回、存储在变量中或作为参数接受
另见:
我理解您的示例为什么fn-ax:Iterator不起作用,但我看不到连接。我的.into调用是否创建了一个无大小的类型?无论如何,IntoIterator确实解决了我的问题;谢谢@LeonoraTindall我的.into调用是否创建未大小的类型?-是的。我理解你的例子为什么fn-ax:Iterator不起作用,但我看不到这种联系。我的.into调用是否创建了一个无大小的类型?无论如何,IntoIterator确实解决了我的问题;谢谢@LeonoraTindall我的.into调用是否创建未大小的类型?-对
fn example(x: Iterator<Item = ()>) {}
pub trait Into<T> {
fn into(self) -> T;
}