Note This question contains syntax that predates Rust 1.0. The code is invalid, but the concepts are still relevant.
How do you create a global static array of strings in Rust?
For integers, this compiles:
static ONE:u8 = 1;
static TWO:u8 = 2;
static ONETWO:[&'static u8, ..2] = [&ONE, &TWO];
But I can't get something similar for strings to compile:
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
The String Array is initialized at the same time as it is declared. You can also initialize the String Array as follows: String[] strArray = new String[3]; strArray[0] = “one”; strArray[1] = “two”; strArray[2] = “three”; Here the String Array is declared first.
To declare a statically allocated array, which you do not have to do for this activity, just declare the type of the array elements and indicate that it is an array by putting []s containing the size after the array variable's name. The size of the array must be specified as either an integer or an integer constant.
Java array can also be used as a static field, a local variable, or a method parameter. The size of an array must be specified by int or short value and not long.
This is a stable alternative for Rust 1.0 and every subsequent version:
const BROWSERS: &'static [&'static str] = &["firefox", "chrome"];
There are two related concepts and keywords in Rust: const and static:
https://doc.rust-lang.org/reference/items/constant-items.html
For most use cases, including this one, const is more appropriate, since mutation is not allowed, and the compiler may inline const items.
const STRHELLO:&'static str = "Hello";
const STRWORLD:&'static str = "World";
const ARR:[&'static str, ..2] = [STRHELLO,STRWORLD];
Note, there is some out-of-date documentation out there that doesn't mention the newer const, including Rust by Example.
Another way to do it nowadays is:
const A: &'static str = "Apples";
const B: &'static str = "Oranges";
const AB: [&'static str; 2] = [A, B]; // or ["Apples", "Oranges"]
Just used this to allocate a small POC level for a game in Rust
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],
];
And loaded using the following function
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,
);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With