我正在尝试在Rust中进行一些高阶编程,但是我在处理闭包时遇到了一些困难.这是一个代码片段,说明了我遇到的一个问题:
pub enum Foo {
Bar(Box<FnOnce(i32)>),
}
pub fn app(i: i32, arg: Foo) {
match arg {
Foo::Bar(f) => f(i),
}
}
Run Code Online (Sandbox Code Playgroud)
当我编译这段代码时,我收到以下错误消息:
error[E0161]: cannot move a value of type std::ops::FnOnce(i32) + 'static: the size of std::ops::FnOnce(i32) + 'static cannot be statically determined
--> src/main.rs:7:24
|
7 | Foo::Bar(f) => f(i),
| ^
Run Code Online (Sandbox Code Playgroud)
因为我把函数放在一个Box,我会想到这将解决编译器不知道大小的问题.如何编译上述程序?
rust ×1