Rust 无法将二进制操作==应用于类型syn::Path

Rust 无法将二进制操作==应用于类型syn::Path,rust,compiler-errors,dependencies,rust-cargo,Rust,Compiler Errors,Dependencies,Rust Cargo,当我用作依赖项时,由于syn::*types相等,它无法编译。要复制,请启动新的cargo lib项目并添加到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上编译会导致错误:

当我用作依赖项时,由于
syn::*
types相等,它无法编译。要复制,请启动新的cargo lib项目并添加到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]:二进制操作“==”无法应用于类型“syn::Path”`
-->src/lib.rs:4:7
|
4 | a==b
|-^^-syn::Path
|     |
|syn::Path
错误:由于上一个错误而中止
:

使用syn;//1.0.33
fn cmp(a:syn::Path,b:syn::Path)->bool{
a==b
}
我探究了syn的
PartialEq
Eq
特性实现在“完整”或“派生”特性门之后,但我仍然没有线索

明确地尝试了1.0.33版,它在操场上工作,在我的电脑上也得到了同样的结果

我曾经经历过将async特性拆开并折叠在一起的困难,但这超出了我的技能

  • rustc 1.46.0(04488afe3 2020-08-24)
  • 货运1.46.0(149024B1D2020-07-17)
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
├── 报价v1.0.7
│   └── proc-macro2 v1.0.19(*)
└── unicode xid v0.2.1
当功能
full
derivate
启用时,类型
syn::Path
可用,但为该类型实现的某些特征不可用

特别是,需要使用
extra traits
功能来获取
PartialEq

extra traits
-所有语法树类型的Debug、Eq、PartialEq、Hash impls

因此,您只需使用

syn = { version = "1.0.39", features = ["full", "extra-traits"] }

我在
Path
上的
Debug
特性也有这个问题。我完全被难住了,因为从源代码看,似乎
full
derivate
就足以获得impl,但它就是不起作用。我没有看文档,因为我有点假设
full
将包含所有内容,它不适用于
full
,也不适用于其他组合。谢谢你发布这个答案。