如何创建一个静态的字符串数组?

时间:2014-12-13 14:03:48

标签: arrays string static rust

  

注意此问题包含早于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

4 个答案:

答案 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,
                );
            }