将标记名称作为字符串返回的Rust方法

时间:2017-08-21 01:23:09

标签: macros rust

stringify宏返回传递给它的标记的字符串:

struct A;

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

[playground]

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

类似的东西:

struct A;

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

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

[playground]

谷歌搜索这个并不富有成效。我不确定它是否可行,但我认为在深入研究stringify的实施之前先问这个是合理的,这将是我调查此事的下一步。

1 个答案:

答案 0 :(得分:2)

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

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

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