我试图在单独的文件中声明地图,然后从我的主函数访问它。
我希望Rust等同于(或者最接近的)这个C ++地图:
static const std::map<std::string, std::vector<std::string>> table = {
{ "a", { "foo" } },
{ "e", { "bar", "baz" } }
};
这是我在Rust的尝试。
table.rs
use std::container::Map;
pub static table: &'static Map<~str, ~[~str]> = (~[
(~"a", ~[~"foo"]),
(~"e", ~[~"bar", ~"baz"])
]).move_iter().collect();
main.rs
mod table;
fn main() {
println(fmt!("%?", table::table));
}
上面给出了table.rs中的两个编译器错误,说&#34;常量包含未实现的表达式类型&#34;。
我也觉得地图声明不是最佳目的。
最后,我使用了Rust 0.8。
答案 0 :(得分:1)
正如Chris Morgan所说,在输入main
之前,rust不允许您运行用户代码以初始化全局变量,这与C ++不同。因此,您大多局限于可以使用文字表达式初始化的基本类型。这是afaik,设计的一部分,不太可能改变,即使特定的错误信息可能不是最终的。
根据您的使用情况,您可能希望更改代码,以便手动将地图作为参数传递给所有想要使用它的函数(呃!),使用task-local storage进行初始化早期使用你的地图的tls插槽,然后在同一个任务中引用它(呃?),或使用不安全的代码和static mut
变量对包含在{{1}中的地图做同样的事情也许所以它可以以Option
开始它的生命(呃!)。