有没有办法将函数的名称返回到 Rust 中的字符串?

Jos*_*ose 4 rust

所以我的问题是这是否可能,如果可能,人们将如何实现这一点。例如,

fn some_fn(){}
let name = get_name_of(some_fn);
println!({}, name);
Run Code Online (Sandbox Code Playgroud)

哪些输出

some_fn
Run Code Online (Sandbox Code Playgroud)

这样的实现可能吗?

Jas*_*son 5

不,从1.44.

根据您的用例,您当然仍然可以使用宏手动指定名称,例如println!使用stringify!.

例如,以下将打印fn: some_fn

fn main() {
    println!("fn: {}", std::stringify!(some_fn));
}

fn some_fn() {}
Run Code Online (Sandbox Code Playgroud)

缺点是它只是打印给定的参数,不允许您获取实际的函数名称。这是一个失败的例子,因为fn: f和 notfn: some_fn将被返回:

fn main() {
    println!("fn: {}", std::stringify!(some_fn));
}

fn some_fn() {}
Run Code Online (Sandbox Code Playgroud)

正如评论中提到的macrorust可以在此处跟踪此类for 的讨论: