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
请帮忙。这至少是我一周内第十次解决这个问题。我不会独自向前走。。。
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报