我创建了一个HashMap,它将字符串映射到类型为Vec<Expression> -> Expression
的函数,其中Expression
是我定义的类型。有问题的代码是:函数的Rust HashMap的类型签名
let functions: HashMap<_, _> = vec!(("+", Box::new(plus))).into_iter().collect();
如果我让拉斯特推断类型对我来说,在上面的代码,它编译并运行正常,因为在上面的代码。但是,如果我尝试指定类型,它不会编译:
let functions: HashMap<&str, Box<Fn(Vec<Expression>) -> Expression>> =
vec!(("+", Box::new(plus))).into_iter().collect();
编译器错误消息不是非常有帮助:
let functions: HashMap<&str, Box<Fn(Vec<Expression>) -> Expression>> = vec!(("+", Box::new(plus))).into_iter().collect();
^^^^^^^ a collection of type `std::collections::HashMap<&str, std::boxed::Box<std::ops::Fn(std::vec::Vec<Expression>) -> Expression>>` cannot be built from an iterator over elements of type `(&str, std::boxed::Box<fn(std::vec::Vec<Expression>) -> Expression {plus}>)`
什么实际类型这个HashMap
的?
看来我的谷歌福是真的很弱,我敢发誓,有这种重复:( –