gpt4 book ai didi

rust - 是否有可能在自定义派生中获得结构的完整 "namespace"?

转载 作者:行者123 更新时间:2023-11-29 08:06:09 25 4
gpt4 key购买 nike

我读过 this documentation page但我仍然不知道该怎么做。

我的文件是:

|- pancakes.rs
|- main.rs

我在“pancakes.rs”中的结构 Pancakes 上推导:

#[derive(HelloWorld)]
struct Pancakes;

我从文档中复制了以下实现,但 ident 不包含完整的“命名空间”:

#[proc_macro_derive(HelloWorld)]
pub fn hello_world(input: TokenStream) -> TokenStream {
let s = input.to_string();
let ast = syn::parse_derive_input(&s).unwrap();
let gen = impl_hello_world(&ast);
gen.parse().unwrap()
}

fn impl_hello_world(ast: &syn::DeriveInput) -> quote::Tokens {
let name = &ast.ident; // <---- HERE name = Pancakes, not pancakes::Pancakes
quote! {
impl HelloWorld for #name {
fn hello_world() {
println!("Hello, World! My name is {}", stringify!(#name));
}
}
}
}

是否可以获取结构体的所有信息?我还想从使用派生的地方获取 cargo 的库名称。

最佳答案

这是不可能的。在 token 流上自定义派生工作,您可以从中轻松构建 AST。但是在这个级别,名称还没有被解析(这是有道理的,宏和自定义派生会影响名称的解析方式,因此需要先完全展开)。

关于rust - 是否有可能在自定义派生中获得结构的完整 "namespace"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48050155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com