我創建了一個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
的?
看來我的谷歌福是真的很弱,我敢發誓,有這種重複:( –