3个版本
0.2.2 | 2022年5月9日 |
---|---|
0.2.1 | 2022年5月2日 |
0.2.0 | 2022年5月2日 |
0.1.0 |
|
#208 in 无标准库
48KB
556 行
用于将表达式解构为多个常量。
此crate的主要功能是multiconst
宏,该宏可以将表达式解构为多个常量。
示例
更多示例,请参阅multiconst
的文档
基本
此示例演示了将数组(长度自动推断)解构为多个常量的过程。
use multiconst::multiconst;
assert_eq!(A, 0b11);
assert_eq!(B, 0b111);
assert_eq!(C, 0b1111);
assert_eq!(D, 0b11111);
multiconst!{
pub const [A, B, C, D]: [u64; _] = mersennes_from(2);
}
/// Generates all mersenne numbers (binary numbers that are all `1` bits)
/// from `start` amount of 1s up to `start + N - 1`.
const fn mersennes_from<const N: usize>(start: u32) -> [u64; N] {
let mut out = [0; N];
multiconst::for_range!{i in 0..N =>
out[i] = (1 << (i as u32 + start)) - 1;
}
out
}
结构体
此示例演示了如何解构实现 FieldType
的结构体。
此示例使用 FieldType
derive 宏(需要 "derive" 功能),使得可以在不注解类型的情况下解构结构体字段。
use multiconst::{FieldType, multiconst};
assert_eq!(MIN, 3);
assert_eq!(MAX, 21);
multiconst!{
const MinMax{min: MIN, max: MAX}: MinMax = min_max(&[21, 13, 3, 8, 5]);
}
#[derive(FieldType)]
struct MinMax {
min: u32,
max: u32,
}
const fn min_max(elems: &[u32]) -> MinMax {
let mut min = u32::MAX;
let mut max = 0;
multiconst::for_range!{i in 0..elems.len() =>
let elem = elems[i];
if elem < min { min = elem; }
if elem > max { max = elem; }
}
MinMax{min, max}
}
功能
所有这些crate功能都是可选的
"derive"
:启用FieldType
derive 宏。
无std支持
multiconst
是 #![no_std]
,它可以在任何可以使用Rust的地方使用。
最低支持的Rust版本
multiconst
需要 Rust 1.51.0,需要crate功能来使用更新的语言特性。
依赖项
~220KB