注意此问题包含早于Rust 1.0的语法。代码无效,但概念仍然相关。
如何在Rust中创建全局静态字符串数组?
对于整数,这编译:
static ONE:u8 = 1;
static TWO:u8 = 2;
static ONETWO:[&'static u8, ..2] = [&ONE, &TWO];
但我无法为字符串编译类似的内容:
static STRHELLO:&'static str = "Hello";
static STRWORLD:&'static str = "World";
static ARR:[&'static str, ..2] = [STRHELLO,STRWORLD]; // Error: Cannot refer to the interior of another static
答案 0 :(得分:29)
这是Rust 1.0及其后续版本的稳定替代方案:
const BROWSERS: &'static [&'static str] = &["firefox", "chrome"];
答案 1 :(得分:4)
Rust中有两个相关的概念和关键字:const和static:
http://doc.rust-lang.org/reference.html#constant-items
对于大多数用例,包括这个用例,const更合适,因为不允许变异,编译器可能内联const项。
const STRHELLO:&'static str = "Hello";
const STRWORLD:&'static str = "World";
const ARR:[&'static str, ..2] = [STRHELLO,STRWORLD];
请注意,有一些过时的文档没有提到较新的const,包括Rust by Example。
答案 2 :(得分:3)
现在的另一种方法是:
const A: &'static str = "Apples";
const B: &'static str = "Oranges";
const AB: [&'static str; 2] = [A, B]; // or ["Apples", "Oranges"]
答案 3 :(得分:1)
仅以此为Rust中的游戏分配一个小的POC级别
const LEVEL_0: &'static [&'static [i32]] = &[
&[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
&[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
&[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
&[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
&[1, 9, 0, 0, 0, 2, 0, 0, 3, 1],
&[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
&[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
&[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
&[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
&[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
];
并使用以下功能加载
pub fn load_stage(&mut self, ctx: &mut Context, level: usize) {
let levels = vec![LEVEL_0];
for (i, row) in levels[level].iter().enumerate() {
for (j, col) in row.iter().enumerate() {
if *col == 1 {
self.board.add_block(
ctx,
Vector2::<f32>::new(j as f32, i as f32),
self.cell_size,
);
}