3 个版本
0.0.3 | 2023年9月28日 |
---|---|
0.0.2 | 2023年9月28日 |
0.0.1 | 2023年9月28日 |
#10 in #trick
13KB
193 行
breakdance
这是一个通过宏欺骗Rust集合以支持异构类型的实验。
该宏通过在Breakdown
枚举中存储类型来支持异构列表。该枚举通过解析源代码中出现的breakdown!()
调用生成,并为每个类型创建一个枚举变体。可以使用.inner()
、.inner_ref()
和.inner_mut()
方法来获取内部值。
目前,访问内部值时仍需要指定预期类型,因此除非它们都共享一个特征,否则无法迭代内部值。对于Breakdown变体的特征实现是可能的,但目前在技术上比较困难;未来的开发可能会看到此类附加功能的扩展,但到目前为止,我主要专注于调试。
这只是一个玩具项目,让我更熟悉Rust工具的全套,但如果有人想在代码中尝试它,请随意!如果您在使它工作遇到麻烦,请在此GitHub存储库(https://github.com/j-stach/breakdance)上留下一个问题。
欢迎提出任何其他问题或建议!请通过GitHub向我发送消息。
如何使用
将其添加到您的项目中
cargo add breakdancer
它应该像这样工作
use breakdance::*;
#[breakdance]
// submod declarations
fn main() {
let num = breakdown!(42u8);
let tru = breakdown!(true);
let vec: Vec<Breakdown> = vec![num, tru];
let num: &u8 = vec[0].inner_ref();
println![ "{}", num ]; // prints 42
let tru: &mut bool = vec[1].inner_mut();
*tru = false;
println![ "{}", tru ]; // prints false
}
依赖关系
~0.3–0.8MB
~19K SLoC