如何在Rust结构体中声明syn::PathArguments::Parenthesized类型字段?
解决方案:使用小写
fn函数指针类型匹配PathArguments::Parenthesized 要触发PathArguments::Parenthesized分支,你需要使用小写的fn关键字定义的原生函数指针类型,而非大写的Fn trait类型。具体写法如下:
- 正确的字段类型声明:
struct TestStruct { func_ptr: fn(String, String) -> String, }
为什么之前的写法不生效?
- 大写的
Fn是Rust中的trait,使用时必须配合dyn关键字(如dyn Fn(String, String) -> String),若用Box包裹(Box<dyn Fn(...) -> ...>),语法中的角括号会被解析为PathArguments::AngleBracketed,自然匹配到对应分支。 - 小写的
fn是原生函数指针类型,它的参数列表和返回值以(A, B) -> C的形式直接声明,这种结构在TokenStream中会被解析为PathArguments::Parenthesized,完全符合你的测试需求。
用这个类型作为结构体字段,就能触发宏代码中你想要的错误分支_ => Error::new(segment.arguments.span(), "Can only handle <> type path args").to_compile_error()。
内容的提问来源于stack exchange,提问作者r3stle55
相关产品推荐
相关产品推荐

