如何在futures :: Stream中使用take_while? [英] How to use take_while with futures::Stream?
问题描述
我正在尝试了解在操场上):
I'm trying to understand what syntax should I use for take_while()
with futures::Stream;
crate (0.1.25). Here's a piece of code (on playground):
use futures::{stream, Stream}; // 0.1.25
fn into_many(i: i32) -> impl Stream<Item = i32, Error = ()> {
stream::iter_ok(0..i)
}
fn main() {
println!("start:");
let _ = into_many(10)
// .take_while(|x| { x < 10 })
.map(|x| {
println!("number={}", x);
x
})
.wait();
for _ in foo {} // ← this (by @mcarton)
println!("finish:");
}
主要目标是确定操作员/命令的正确组合,以使用take_while
成功运行展示的游乐场:当我取消注释take_while()时,它会说
The main goal is to determine the right combinations of operators/commands to run the presented playground successfully with take_while
: when I uncomment my take_while() it says
expected &i32, found integral variable | help: consider borrowing here: &10
如果我提供参考,它会说:
and if I put a reference, it says:
error[E0277]: the trait bound bool: futures::future::Future is not satisfied
对我来说很奇怪.
推荐答案
take_while
期望闭包返回将来,或者可以将其转换为将来. bool
没有实现IntoFuture
,因此您必须将其包装在以后. future::ok
返回一个立即准备就绪的未来指定值.
take_while
expects the closure to return a future, or something that can be converted to a future. bool
doesn't implement IntoFuture
, so you have to wrap it in a future instead. future::ok
returns a future that is immediately ready with the specified value.
use futures::{future, stream, Stream}; // 0.1.25
fn into_many(i: i32) -> impl Stream<Item = i32, Error = ()> {
stream::iter_ok(0..i)
}
fn main() {
println!("start:");
let foo = into_many(10)
.take_while(|&x| { future::ok(x < 10) })
.map(|x| {
println!("number={}", x);
x
})
.wait();
for _ in foo {}
println!("finish:");
}
这篇关于如何在futures :: Stream中使用take_while?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!