#const #array #const-fn #init #fn #macro #no-alloc

no-std const-array-init

使用闭包语法或const函数初始化const上下文中数组的宏

1个稳定版本

1.0.0 2024年4月24日

#256配置

Download history 136/week @ 2024-04-22 5/week @ 2024-04-29 6/week @ 2024-05-06 3/week @ 2024-05-13 11/week @ 2024-05-20 4/week @ 2024-05-27 6/week @ 2024-06-03 7/week @ 2024-06-10 4/week @ 2024-06-17 127/week @ 2024-06-24 38/week @ 2024-07-01 65/week @ 2024-07-08 220/week @ 2024-07-15 13/week @ 2024-07-22 24/week @ 2024-07-29

每月324次下载
用于 spawn64

MIT/Apache

17KB
101

const_array_init Rust crate

使用闭包语法或const函数初始化const上下文中数组的宏。

该crate中的所有宏都是使用macro_rules!实现的,这是一种非常IDE友好的方法。

示例

使用const_arr!

use const_array_init::const_arr;

const ARR1: [i32; 5] = const_arr!([i32; 5], |i| i as i32 + 1);
assert_eq!(ARR1, [1, 2, 3, 4, 5]);

const fn to_i32_plus_one(n: usize) -> i32 {
    n as i32 + 1
}
const ARR2: [i32; 5] = const_arr!([i32; 5], to_i32_plus_one);
assert_eq!(ARR2, [1, 2, 3, 4, 5]);

使用make_const_arr!

use const_array_init::make_const_arr;

make_const_arr!(ARR1, [i32; 5], |i| i as i32 + 1);
assert_eq!(ARR1, [1, 2, 3, 4, 5]);

const fn to_i32_plus_one(n: usize) -> i32 {
    n as i32 + 1
}

make_const_arr!(ARR2, [i32; 5], to_i32_plus_one);
assert_eq!(ARR2, [1, 2, 3, 4, 5]);

高级使用

  • 请注意,User并不是Copy,但您仍然可以使用此宏在const fn上下文中使用。
use const_array_init::const_arr;

#[derive(Debug, PartialEq, Eq)]
struct User { id: u32 }

const fn create_user_from_i(i: usize) -> User {
    User { id: i as u32 }
}

const USERS: [User; 1024] = const_arr!([User; 1024], create_user_from_i);

const USERS2: [User; 1024] = const_arr!([User; 1024], |i| User { id: i as u32 });

无运行时依赖