在一个带参数的闭包上,“Closure接受0个参数”

时间:2018-01-26 03:54:29

标签: rust

我试图在条件之后将闭包传递给函数:

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。

1 个答案:

答案 0 :(得分:0)

原来我的Rust版本是1.22.1,但最新版本是1.23.0。这就解释了为什么操场返回了更准确的错误:expected signature of fn(std::result::Result<bool, futures::Canceled>) -> _ ......这就是问题所在。