返回

rust-与闭包共享变量

发布时间:2022-05-04 10:42:08 329
# scala

我知道,类似问题的答案已经存在。。。有点。。。我发现的都是非常高级的指令,而不是代码示例,我无法真正理解它们,我已经被困在原地好几天了。。。

我需要和闭包共享一个变量。所以我有我的MockSlave结构。我想让它创建一个向量,然后可以与shell关闭。当前版本看起来像这样

impl MockSlave {

    pub async fn new(port: i32) -> Result> {
        let addr = String::from(format!("https://127.0.0.1:{}", port).as_str());
        let endpoint = Endpoint::from_str(addr.as_str())?;

        let commands = Rc::new(RefCell::new(Vec::new()));

        let client = SlaveClient::new(endpoint, CommandProcessors { 
            shell: Some(|command| {
                commands.borrow_mut().push(command);
                Ok(())
            })
        }).await?;

        Ok(MockSlave {
            client,
            commands
        })
    }

为清楚起见,以下是SlaveClient::new

pub async fn new(endpoint: Endpoint, processors: CommandProcessors) -> Result  {
        let slave = SlaveClient { 
            client: SlaveManagerClient::connect(endpoint).await?,
            processors
        };

        Ok(slave)
    }

以下是命令处理器:

pub struct ReadWriteStreamingCommand {
    pub command: Command
}

pub type ReadWriteSteamingCommandprocessor = fn(Box) -> Result<(), Box>;

pub struct CommandProcessors {
    pub shell: Option
}

现在,有趣的是VSCode和cargo build对于同一件事,请给出稍微不同的错误。

VSCode说:

closures can only be coerced to `fn` types if they do not capture any variables

同时cargo build


error[E0308]: mismatched types
  --> tests/api_tests/src/mock_slave.rs:20:25
   |
20 |               shell: Some(|command| {
   |  _________________________^
21 | |                 commands.borrow_mut().push(command);
22 | |                 Ok(())
23 | |             })
   | |_____________^ expected fn pointer, found closure

请帮忙。这至少是我一周内第十次解决这个问题。我不会独自向前走。。。

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(1)
按点赞数排序
用户头像