gpt4 book ai didi

rust - 为什么在将更高级别的特征边界与关联类型结合时会出现 Rust 编译错误?

转载 作者:行者123 更新时间:2023-12-03 11:30:14 26 4
gpt4 key购买 nike

我正在编写一些涉及通用特征和非 'static 的 Rust 代码。类型,因此我遇到了近似 generic associated types 的需要.我知道在当前的 Rust 中无法优雅地模拟 GAT,但我认为我已经找到了一种(不优雅的)解决方法,可以使用具有生命周期参数和更高级别特征边界的特征来适应我的特定情况。但是,我收到了我不理解的编译器错误,关于缺少关联类型的特征实现。

以下代码显示了重现错误的最小示例。

use std::fmt::Debug;

trait Resource<'r> {
type Value;
}

struct ResourceImpl();

impl<'r> Resource<'r> for ResourceImpl {
type Value = u32;
}

fn test_generic<R>()
where
for<'r> R: Resource<'r>,
for<'r> <R as Resource<'r>>::Value: Debug,
{
}

fn test_specific() {
test_generic::<ResourceImpl>();
}

当我尝试编译此代码 ( rustc 1.41.0) 时,我收到以下错误消息。

error[E0277]: `<ResourceImpl as Resource<'r>>::Value` doesn't implement `std::fmt::Debug`
--> src/lib.rs:21:5
|
13 | fn test_generic<R>()
| ------------
...
16 | for<'r> <R as Resource<'r>>::Value: Debug,
| ----- required by this bound in `test_generic`
...
21 | test_generic::<ResourceImpl>();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `<ResourceImpl as Resource<'r>>::Value` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
|
= help: the trait `for<'r> std::fmt::Debug` is not implemented for `<ResourceImpl as Resource<'r>>::Value`

错误消息听起来像是在说 u32未实现 Debug ,这是没有意义的。我一定是误解了错误消息的含义,但我无法弄清楚实际问题是什么。

最佳答案

有一个open issue关于这个问题。

在您的情况下,解决方法可能是绑定(bind) Debug到关联类型Resource::Value ?

trait Resource<'r> {
type Value: Debug;
}.

关于rust - 为什么在将更高级别的特征边界与关联类型结合时会出现 Rust 编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60284074/

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