小编Pab*_*mos的帖子

如何在程序宏中获取文字的值和类型?

我正在实现一个类似函数的程序宏,它将单个字符串文字作为参数,但我不知道如何获取字符串文字的值。

如果我打印变量,它会显示一堆字段,其中包括类型和值。他们显然就在那里,在某个地方。我如何获得它们?

extern crate proc_macro;
use proc_macro::{TokenStream,TokenTree};

#[proc_macro]
pub fn my_macro(input: TokenStream) -> TokenStream {
    let input: Vec<TokenTree> = input.into_iter().collect();
    let literal = match &input.get(0) {
        Some(TokenTree::Literal(literal)) => literal,
        _ => panic!()
    };

    // can't do anything with "literal"
    // println!("{:?}", literal.lit.symbol); says "unknown field"

    format!("{:?}", format!("{:?}", literal)).parse().unwrap()
}
Run Code Online (Sandbox Code Playgroud)
#![feature(proc_macro_hygiene)]
extern crate macros;

fn main() {
    let value = macros::my_macro!("hahaha");
    println!("it is {}", value);
    // prints "it is Literal { lit: Lit { kind: Str, symbol: "hahaha", suffix: None }, …
Run Code Online (Sandbox Code Playgroud)

rust

8
推荐指数
2
解决办法
1740
查看次数

为什么 ~/.cargo 目录这么大?

在我的 Windows 10 机器上,它是 3.5GG。它存储什么?我怎样才能把它剪下来?

rust rust-cargo

6
推荐指数
1
解决办法
503
查看次数

采用通用枚举或任何可以在函数中执行“as usize”的类型

我不知道这个问题的答案会是什么样子,这就是为什么标题如此模糊。

在 Rust 中可以使用“as”将枚举类型转换为数字,如下所示

enum ExampleEnum { A, B, C }

fn main() {
    println!("{}", ExampleEnum::B as usize);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法创建一个通用函数,可以采用任何可以做到这一点的数据类型?或者封装该功能的一些特征?也许以一种“不安全”的方式(转化?)?

enum ExampleEnum { A, B, C }

fn what_n(x: ???) -> usize {
    x as usize
}

fn main() {
    println!("{}", what_n(ExampleEnum::B));
}
Run Code Online (Sandbox Code Playgroud)

rust

5
推荐指数
0
解决办法
1627
查看次数

标签 统计

rust ×3

rust-cargo ×1