1 个稳定版本
1.2.0 | 2019年8月15日 |
---|
#2242 在 开发工具
25KB
601 行
cluStaticData
静态值的初始化器。手动初始化(使用安全函数和访问对象时无成本)或自动初始化(访问对象时无零成本;必须设置正确的默认值)。
- 静态数据的手动初始化。
- 静态数据的自动初始化。
使用(静态数据的手动初始化)
#[macro_use]
extern crate cluStaticData;
use std::fmt::Debug;
use cluStaticData::err::StaticErr;
static_data! {
static ref TEST: &'static (dyn MyTrait + 'static) = &();
}
pub trait MyTrait: Debug + Sync {
fn data(&self) -> usize;
}
impl MyTrait for () {
#[inline]
fn data(&self) -> usize {
0
}
}
impl MyTrait for usize {
#[inline]
fn data(&self) -> usize {
*self
}
}
fn main() -> Result<(), StaticErr<&'static (dyn MyTrait + 'static)>> {
let _result = TEST.set(&10)?;
println!("OK {:?}, data: {:?}", TEST, TEST.data());
let err = TEST.set(&20);
assert_eq!(err.err().unwrap().into_inner().data(), 20);
println!("OK {:?}, data: {:?}", TEST, TEST.data());
Ok( () )
}
使用 2(静态数据的手动初始化)
#[macro_use]
extern crate cluStaticData;
use cluStaticData::err::StaticErr;
static_data! {
pub(crate) static ref TEST: TestValue = TestValue::Unk;
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum TestValue {
Unk,
RuntimeValue(usize),
}
fn main() {
assert_eq!(*TEST, TestValue::Unk);
println!("OK #1 {:?}", TEST);
let result = TEST.set(TestValue::RuntimeValue(10));
assert_eq!(result.is_ok(), true);
println!("OK #2 {:?}", TEST);
let result = TEST.set(TestValue::RuntimeValue(20));
assert_eq!(result.is_ok(), false);
assert_eq!(*TEST, TestValue::RuntimeValue(10));
println!("OK #3 {:?}", TEST);
let result = TEST.replace(TestValue::Unk);
assert_eq!(result, Err(StaticErr::prev(TestValue::Unk)));
println!("OK #4 {:?}", result);
}
使用 3(静态数据的自动初始化)
#[macro_use]
extern crate cluStaticData;
use std::collections::HashMap;
static_data! {
pub(crate) static ref +runtime HASH_MAP: HashMap<String, String> = {
let mut hash_map = HashMap::new();
hash_map.insert("test".to_string(), "b".to_string());
hash_map.insert("test2".to_string(), "b2".to_string());
hash_map
};
static ref +runtime HASH_MAP2: usize = 0;
}
fn main() {
println!("{:?}", HASH_MAP);
}
许可证
版权所有 2019 #UlinProject Denis Kotlyarov (Денис Котляров)
许可协议:Apache License,版本 2.0
依赖
~155KB