问题描述
如何将 proc_macro::Literal
转换为内部值?例如。我有
use proc_macro::{ TokenStream,TokenTree };
#[proc_macro]
pub fn xtest(items: TokenStream) -> TokenStream {
if let Some(TokenTree::Literal(l)) = items.into_iter().next() {
println!("{:?}",l);
// output: Literal { kind: Integer,symbol: "0x42",suffix: None,span: #0 bytes(52..56) }
// how can I convert 'l'?
// assert_eq!(l,0x42);
}
TokenStream::new()
}
并像使用它一样
#[test]
fn test_fn() {
xtest!(0x42);
}
在 xtest
宏中,我需要知道在其上运行操作的值。
目前,支持数字文字就足够了(在“1”、“0x10”、“1_000”等变体中)。 1 << 2
左右的解释会很好,但可以手动实现(当 Literal
转换已解决)。
背景
我想模拟 C 的指定初始值设定项;例如写一些类似的东西
const VECTORS: vectors!(DefaultHandler,{
23 => UartHandler,42 => AdcHandler,}
扩展到
static VECTORS: [HandlerType; 43] = {
DefaultHandler,DefaultHandler,...
UartHandler /* at index 23 */,...
AdcHandler /* at index 42 */
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)