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
,也不适用于其他组合。谢谢你发布这个答案。