gpt4 book ai didi

generics - 如何消除特征对象边界中的关联类型的歧义?

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

如果我尝试定义一个盒装 IEvent 像这样的字段:

use stdweb::private::ConversionError;
use stdweb::web::event::IEvent;

struct Foo {
bar: Box<IEvent<Error = ConversionError>>,
}

我收到这样的错误:

error[E0221]: ambiguous associated type `Error` in bounds of `stdweb::traits::IEvent`
--> src/events.rs:16:21
|
16 | bar: Box<IEvent<Error = ConversionError>>,
| ^^^^^^^^^^^^^^^^^^^^^^^ ambiguous associated type `Error`
|
note: associated type `stdweb::traits::IEvent` could derive from `stdweb::unstable::TryFrom<stdweb::Reference>`
--> src/events.rs:16:21
|
16 | bar: Box<IEvent<Error = ConversionError>>,
| ^^^^^^^^^^^^^^^^^^^^^^^
note: associated type `stdweb::traits::IEvent` could derive from `stdweb::unstable::TryFrom<stdweb::Value>`
--> src/events.rs:16:21
|
16 | bar: Box<IEvent<Error = ConversionError>>,
| ^^^^^^^^^^^^^^^^^^^^^^^

If you want more information on this error, try using "rustc --explain E0221"

如何编写语法来设置关联的 Error类型(特征 TryFrom<Value>TryFrom<Reference> )?

最佳答案

不相信你可以。

检查我认为是编译器中的相关类型 ( TypeBinding in libsyntax ) 表明它只支持关联类型的单个标识符。所以我认为没有任何方法可以从字段类型中指定关联类型。

定义您自己的中间特征没有帮助,因为它使用相同的语法来约束关联类型。即使修改 stdweb 中的特征似乎也不起作用,因为试图将 TryFrom::Error 类型限制为关联类型,例如 ReferenceType 产生被编译器拒绝的循环依赖。更改 ReferenceType 以接受用于直接约束 Error 类型的通用类型参数也不能满足它。

这可能只是该语言目前还无法处理的一种边缘情况。如果其他人没有提出解决方案,我建议在 compiler's issue tracker 中打开一个问题。有一个完整的激励示例。

我能想到的唯一其他解决方案是修改 stdweb 以不使用多个 TryFrom 约束。

关于generics - 如何消除特征对象边界中的关联类型的歧义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49143625/

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