8 个版本 (4 个破坏性更改)
0.5.0 | 2024 年 2 月 29 日 |
---|---|
0.4.1 | 2024 年 1 月 24 日 |
0.4.0 | 2023 年 11 月 3 日 |
0.3.1 | 2023 年 10 月 10 日 |
0.1.1 | 2022 年 3 月 30 日 |
#102 in Rust 模式
190,922 每月下载量
在 366 个crate中使用 (10 个直接使用)
14KB
97 行
constcat
std::concat!
支持使用 const
变量和表达式。
在稳定版 Rust 中运行 ✨。
🚀 开始使用
将 constcat
添加到您的 Cargo 清单中。
cargo add constcat
使用以下方式导入宏。
use constcat::concat;
🤸 使用
字符串切片
concat!
与 std::concat!
完全相同,将 &str
文本字面量连接成一个静态字符串切片,但现在您可以传递变量和常量表达式。
const CRATE_NAME: &str = env!("CARGO_PKG_NAME");
const CRATE_VERSION: &str = env!("CARGO_PKG_VERSION");
const fn tada() -> &'static str { "🎉" }
const VERSION: &str = concat!(CRATE_NAME, " ", CRATE_VERSION, tada());
字节切片
concat_bytes!
与 concat!
类似,将 const
&[u8]
表达式和字面量连接成一个静态字节切片。
const VERSION: u32 = 1;
const fn entries() -> &'static [u8] { b"example" }
const HEADER: &[u8] = concat_bytes!(&VERSION.to_le_bytes(), entries());
T
切片
concat_slices!
是上述两种的底层宏,可用于将 const
&[T]
表达式连接成一个静态切片。
此宏需要在逗号分隔的表达式之前指定切片的类型,格式为 [T]:
。
const MAGIC: &[i32; 4] = &[1, 3, 3, 7];
const VERSION: i32 = 1;
const HEADER: &[i32] = concat_slices!([i32]: MAGIC, &[0, VERSION]);
如果类型不是标准整型,即不是 f32
、f64
或 char
类型,那么您还必须提供一个带有类型的初始化表达式,其形式为 [init; T]:
。只要类型和初始化表达式可以指定为数组初始化表达式,这对于自定义类型也适用。
const PRIMARIES: &'static [(u8, u8, u8)] = &[(255, 0, 0), (0, 255, 0), (0, 0, 255)];
const SECONDARIES: &'static [(u8, u8, u8)] = &[(255, 255, 0), (255, 0, 255), (0, 255, 255)];
const COLORS: &[(u8, u8, u8)] = concat_slices!([(0, 0, 0); (u8, u8, u8)]: PRIMARIES, SECONDARIES);
许可协议
本项目根据MIT许可协议和Apache许可协议(版本2.0)进行分发。
有关详细信息,请参阅LICENSE-APACHE和LICENSE-MIT。