#data #mut #ref #static

cbsk_mut_data

cbsk_mut_data 是一个 ref mut 工具

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 数据结构

Download history 11/week @ 2024-05-01 101/week @ 2024-05-08 211/week @ 2024-05-15 71/week @ 2024-05-22 13/week @ 2024-05-29 195/week @ 2024-06-05 22/week @ 2024-06-12 12/week @ 2024-06-19 167/week @ 2024-06-26 11/week @ 2024-07-03 20/week @ 2024-07-10 147/week @ 2024-07-17 185/week @ 2024-07-24 36/week @ 2024-07-31 14/week @ 2024-08-07 147/week @ 2024-08-14

每月 386 次下载
用于 7 个 crate (4 个直接使用)

MIT/Apache

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
}

感谢

无运行时依赖

功能