You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 20:14:55