救各路大神解答,
目的:我想要做一个解释器,有一个需求就是要从 rust 中的函数绑掉到给解释器用,作为解释器的全域上下文。
问题:我想要让从cx
捞出来的target_func
可以在将cx
传入target_func
作为其上下文,但是我怎实现都做不出来,请问下面这段程式怎么让编译通过。
use std::collections::HashMap;
struct Content {
pub data: i32,
pub map_env_fun: HashMap<String, EnvFunction>,
}
impl Content {
fn new() -> Self {
Content {
data: 0,
map_env_fun: HashMap::new(),
}
}
}
type BoxFnMut = Box<dyn FnMut(&mut Content) -> bool>;
enum EnvFunction {
Func(BoxFnMut),
}
fn __fun(cx: &mut Content) -> bool {
cx.data += 1;
true
}
fn init_built_in_functions(cx: &mut Content) {
let fun: BoxFnMut = Box::new(__fun);
cx.map_env_fun
.insert("key_1".to_string(), EnvFunction::Func(fun));
cx.data += 1;
}
fn main() {
let mut cx = Content::new();
init_built_in_functions(&mut cx);
let EnvFunction::Func(target_func) = cx.map_env_fun.get_mut("key_1").unwrap();
// --------------------------------------------------------------
target_func(&mut cx); // Error:编译失败
// --------------------------------------------------------------
println!("Content data: {}", cx.data);
}
Ext Link: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=072c17bf78b0cdb99dfa33e408007a7b
评论区
写评论