gpt4 book ai didi

rust - 如何将 take_while 与 futures::Stream 一起使用?

转载 作者:行者123 更新时间:2023-11-29 08:23:21 26 4
gpt4 key购买 nike

我想了解我应该为 take_while() 使用什么语法使用 futures::Stream; crate (0.1.25)。这是一段代码 ( 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 成功运行呈现的 playground:当我取消注释我的 take_while() 时,它说

expected &i32, found integral variable | help: consider borrowing here: &10

如果我放一个引用,它会说:

error[E0277]: the trait bound bool: futures::future::Future is not satisfied

这对我来说很奇怪。

最佳答案

take_while 期望闭包返回一个 future ,或者可以转换为 future 的东西。 bool 没有实现 IntoFuture,因此您必须将其包装在未来。 future::ok返回一个立即准备好指定值的 future 。

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:");
}

关于rust - 如何将 take_while 与 futures::Stream 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54844417/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com