在单独的文件中声明地图并读取其内容

时间:2013-11-24 14:21:13

标签: rust

我试图在单独的文件中声明地图,然后从我的主函数访问它。

我希望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。

1 个答案:

答案 0 :(得分:1)

正如Chris Morgan所说,在输入main之前,rust不允许您运行用户代码以初始化全局变量,这与C ++不同。因此,您大多局限于可以使用文字表达式初始化的基本类型。这是afaik,设计的一部分,不太可能改变,即使特定的错误信息可能不是最终的。

根据您的使用情况,您可能希望更改代码,以便手动将地图作为参数传递给所有想要使用它的函数(呃!),使用task-local storage进行初始化早期使用你的地图的tls插槽,然后在同一个任务中引用它(呃?),或使用不安全的代码和static mut变量对包含在{{1}中的地图做同样的事情也许所以它可以以Option开始它的生命(呃!)。