gpt4 book ai didi

rust - 无法对 Box 对象边界使用内置特征 From 和 PartialOrd

转载 作者:行者123 更新时间:2023-11-29 07:52:57 25 4
gpt4 key购买 nike

不可否认,我对 Rust 还很陌生,但我喜欢目前所看到的一切。也就是说,我遇到了一个问题,我遇到了错误:

error: only the builtin traits can be used as closure or object bounds [E0225]
defaults: HashMap<String, Box<Any + From<String> + PartialOrd>>,
^~~~~~~~~~~~

对于以下代码:

pub struct Builder {                                                                                                                                                                                                                           
defaults: HashMap<String, Box<Any + From<String> + PartialOrd>>,
...
}

如果我删除 From 上的绑定(bind),我会得到相同的错误,但对于 PartialOrd。我不明白为什么,因为我相当确定 FromPartialOrd 都是内置特征。任何帮助,将不胜感激。

最佳答案

$ rustc --explain E0225
You attempted to use multiple types as bounds for a closure or trait object.
Rust does not currently support this. A simple example that causes this error:

fn main() {
let _: Box<std::io::Read+std::io::Write>;
}

Builtin traits are an exception to this rule: it's possible to have bounds of
one non-builtin type, plus any number of builtin types. For example, the
following compiles correctly:

fn main() {
let _: Box<std::io::Read+Copy+Sync>;
}

PartialOrdFrom 不是内置的,它们是在标准库中定义的。 CopySync 等特征是内置的。

您可以通过定义一个新的特征来解决这个问题,其中包含您想要的特征作为 super 特征:

trait MyTrait: Any + From<String> + PartialOrd {}

然后您可以为实现您想要的所有特征的所有类型提供一揽子实现(您可以在边界中指定多个特征,但不能在特征对象中指定):

impl<T> MyTrait for T where T: Any + From<String> + PartialOrd {}

关于rust - 无法对 Box 对象边界使用内置特征 From 和 PartialOrd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35878079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com