DevSight

Rust, Global static objects

Rust는 ‘statically typed’ 언어로 런타임 비용 없이 컴파일 타임에 메모리 안전을 보장하여 런타임 버그를 방지한다. 그러나 때로는 동적 값을 사용해야 할 때가 있다.1

아래의 예제는 ‘전역 정적 객체’를 구현한 몇 가지 방법(트릭)을 보여준다.2

Declare lazily evaluated constant
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
use lazy_static::lazy_static;
use std::collections::HashMap;

lazy_static! {
    static ref PRIVILEGES: HashMap<&'static str, Vec<&'static str>> = {
        let mut map = HashMap::new();
        map.insert("가나다", vec!["user", "admin"]);
        map.insert("마바사", vec!["user"]);
        map
    };
}

fn show_access(name: &str) {
    let access = PRIVILEGES.get(name);
    println!("{}: {:?}", name, access);
}

fn main() {
    let access = PRIVILEGES.get("가나다");
    println!("가나다: {:?}", access);
    show_access("마바사");
}

/* 실행결과
가나다: Some(["user", "admin"])
마바사: Some(["user"])
*/
Read More ···