当我使用 my fork of async-trait 作为依赖项时,由于 syn::*
类型相等,它无法编译。 All is green in async-trait CI checks 。要重现,请启动一个新的 cargo 库项目并添加到 Cargo.toml:
[dependencies]
syn = { version = "1.0.39", features = ["full"] }
在 lib.rs 中:pub fn cmp(a: syn::Path, b: syn::Path) -> bool {
a == b
}
在 Rust 1.46.0 上编译会导致错误:error[E0369]: binary operation `==` cannot be applied to type `syn::Path`
--> src/lib.rs:4:7
|
4 | a == b
| - ^^ - syn::Path
| |
| syn::Path
error: aborting due to previous error
syn::Path
implements Eq
/ PartialEq
with feature "full" or "derive" :use syn; // 1.0.33
fn cmp(a: syn::Path, b: syn::Path) -> bool {
a == b
}
我探索了 syn 的 PartialEq
和 Eq
特征实现在“完整”或“派生”功能门之后,但我仍然没有任何线索。明确尝试了 1.0.33 版,它在操场上工作,在我的电脑上结果相同。
我已经克服了将 async-trait 分开并将其重新组合在一起的障碍,但这超出了我的技能。
cargo tree
在一个带有 syn 的新项目上:tmp v0.1.0 (/home/debian/Documents/Projects/tmp)
└── syn v1.0.39
├── proc-macro2 v1.0.19
│ └── unicode-xid v0.2.1
├── quote v1.0.7
│ └── proc-macro2 v1.0.19 (*)
└── unicode-xid v0.2.1
最佳答案
当启用 syn::Path
或 full
功能时,类型 derive
可用,但为该类型实现的某些特征则不可用。
特别是 as per syn
's documentation of optional features ,需要 extra-traits
特性来获取 PartialEq
:
因此你只需要调整你的 Cargo.toml
syn = { version = "1.0.39", features = ["full", "extra-traits"] }
关于rust - 二元运算 == 不能应用于类型 syn::Path,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63677722/