如何解决二进制运算==不能应用于syn :: Path
当我使用my fork of async-trait作为依赖项时,由于syn::*
类型相等,它无法编译。 All is green in async-trait CI checks。要进行复制,请启动一个新的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]: 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版,该版本可在操场上使用,在我的PC上也能获得相同的结果。
我已经经历了将异步特性分开并将其折叠在一起的障碍,但这超出了我的技能。
- rustc 1.46.0(04488afe3 2020-08-24)
- 货物1.46.0(149022b1d 2020-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
├── quote v1.0.7
│ └── proc-macro2 v1.0.19 (*)
└── unicode-xid v0.2.1
解决方法
在启用功能syn::Path
或full
的同时 type derive
可用时,为该类型实现的某些特征不是。
尤其是as per syn
's documentation of optional features,extra-traits
功能是获得PartialEq
所必需的:
extra-traits
-所有语法树类型的Debug,Eq,PartialEq,Hash表示。
因此,您只需要使用{p>
Cargo.toml
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。