我试图在条件之后将闭包传递给函数:
extern crate futures;
extern crate tokio_core;
use futures::prelude::*;
use futures::future;
use futures::unsync::*;
use tokio_core::reactor::*;
fn main() {
let mut core = Core::new().unwrap();
let h2 = core.handle();
let fun = |should: Result<bool, ()>| {
if should.unwrap_or(true) {
// do something
}
future::ok(())
};
let (tx, rx) = oneshot::channel::<bool>();
let dummy = true;
if dummy {
h2.spawn(rx.then(fun));
} else {
h2.spawn(future::ok(true).then(fun));
}
core.run(future::ok::<(), ()>(())).unwrap();
}
这是the code in the playground,但是从错误的错误中得到了一个不同的错误。我的错误如下:
error[E0593]: closure takes 0 arguments but 1 argument is required
--> src/client/forger.rs:123:25
|
57 | let fun = |should: Result<bool, ()>| {
| ___________________-
58 | | if !should.unwrap_or(false) {
59 | | return Box::new(future::ok::<(), ()>(()));
60 | | }
... |
117 | | Box::new(future::ok(()))
118 | | };
| |_________- takes 0 arguments
...
123 | h2.spawn(rx.then(fun));
| ^^^^ expected closure that takes 1 argument
为什么Rust说函数fun
在看起来引用它时需要0个参数?
我的Rust版本是1.22.1。
答案 0 :(得分:0)
原来我的Rust版本是1.22.1,但最新版本是1.23.0。这就解释了为什么操场返回了更准确的错误:expected signature of fn(std::result::Result<bool, futures::Canceled>) -> _
......这就是问题所在。