9 个稳定版本
新 2.0.0 | 2024 年 8 月 21 日 |
---|---|
1.3.11 | 2024 年 8 月 19 日 |
1.3.10 | 2024 年 7 月 26 日 |
1.3.8 | 2024 年 6 月 27 日 |
0.1.3 | 2023 年 12 月 20 日 |
#633 in 数据结构
每月 386 次下载
用于 7 个 crate (4 个直接使用)
18KB
290 行
cbsk_mut_data 是一个 ref mut 工具
您可以使用 cbsk_mut_data 进行静态数据修改等
此 cargo crate 的想法来自 dark-std (github)
此 cargo crate 可能不安全,如果您想使用安全数据,可以使用 dark-std (github)
数据类型
- MutDataObj
- MutDataVec
- MutDataHashMap
欢迎提交更多类型的问题
简单示例
Cargo.toml 文件
cbsk_mut_data = "2.0.0"
main.rs 文件
use cbsk_mut_data::mut_data_obj::MutDataObj;
fn main() {
let b = MutDataObj::new(true);
println!("b is {b}");// b is true
b.set(false);
println!("b is {b}");// b is false
b.trigger();
println!("b is {b}");// b is true
}
main.rs 文件(使用结构体)
use cbsk_mut_data::mut_data_obj::MutDataObj;
#[derive(Default, Debug)]
struct A {
data: MutDataObj<i32>,
}
fn main() {
let a = A::default();
println!("a is {a:?}");// a is A { data: 0 }
a.data.set(10);
println!("a is {a:?}");// a is A { data: 10 }
}
main.rs 文件(在结构体中)
use cbsk_mut_data::mut_data_obj::MutDataObj;
#[derive(Default, Debug)]
struct A {
b: MutDataObj<B>,
}
#[derive(Default, Debug)]
struct B {
data: i32,
}
fn main() {
let a = A::default();
println!("a is {a:?}");// a is A { b: B { data: 0 } }
a.b.as_mut().data = 10;
println!("a is {a:?}");// a is A { b: B { data: 10 } }
}
OnceCell 示例
Cargo.toml 文件
once_cell = "1.19.0"
cbsk_mut_data = "2.0.0"
main.rs 文件
use cbsk_mut_data::mut_data_obj::MutDataObj;
use once_cell::sync::Lazy;
pub static B: Lazy<MutDataObj<bool>> = Lazy::new(MutDataObj::default);
fn main() {
println!("b is {}", B.as_ref());// b is false
B.set(true);
println!("b is {}", B.as_ref());// b is true
B.trigger();
println!("b is {}", B.as_ref());// b is false
}
不安全示例
Cargo.toml 文件
cbsk_mut_data = "2.0.0"
main.rs 文件
use std::sync::Arc;
use cbsk_mut_data::mut_data_obj::MutDataObj;
use cbsk_mut_data::mut_data_ref::MutDataRef;
fn main() {
// unsafe example
let mut a = MutDataRef::new(&mut 0);
println!("a is {a:?}");// a is 0
let b = a.clone();
*a = 10;
println!("b is {b:?}");// b is 10
// mut arc
// mut arc may have many scenarios and can be very useful, but it is not recommended for you to use it this way
let c = Arc::new(MutDataObj::new(0));
println!("c is {c:?}");// c is 0
let d = c.clone();
c.set(10);
println!("d is {d:?}");// d is 10
}