Macros 将令牌名称作为字符串返回的Rust方法

Macros 将令牌名称作为字符串返回的Rust方法,macros,rust,Macros,Rust,stringify宏返回传递给它的令牌的字符串: struct A; fn main() { let my_identifier = A {}; assert!(stringify!(my_identifier) == "my_identifier"); } [] 有没有方法让方法返回调用它的令牌的字符串 比如: struct A; impl A { fn token_to_string(&self) -> &str{ /* .

stringify
宏返回传递给它的令牌的字符串:

struct A;

fn main() {
    let my_identifier = A {};
    assert!(stringify!(my_identifier) == "my_identifier");
}
[]

有没有方法让方法返回调用它的令牌的字符串

比如:

struct A;

impl A {
    fn token_to_string(&self) -> &str{
        /* ... */
    }
}

fn main() {
    let my_identifier = A {};
    assert!(my_identifier.token_to_string() == "my_identifier");
}
[]


谷歌在这方面的搜索并没有收获。我不确定这是否可能,但我认为在深入研究
stringify
的实现之前,在这里提问是合理的,这将是我调查这一问题的下一步。

不,这是不可能的。这两种构造在不同的上下文中在不同的时间执行

宏在编译过程中执行,因此可以访问有关原始源文件的所有信息。这意味着他们能够处理单个源令牌并基于它们执行操作

方法在程序本身运行时执行,并且只能访问其参数和全局变量。它们没有关于应用程序原始源代码的数据,因为这些信息没有存储在已编译的二进制文件中