Generics 如何消除trait对象边界中关联类型的歧义?

Generics 如何消除trait对象边界中关联类型的歧义?,generics,rust,Generics,Rust,如果我尝试定义这样的框字段: use stdweb::private::ConversionError; use stdweb::web::event::IEvent; struct Foo { bar: Box<IEvent<Error = ConversionError>>, } 使用stdweb::private::ConversionError; 使用stdweb::web::event::IEvent; 结构Foo{ 酒吧:盒子, } 我得到一个类

如果我尝试定义这样的框字段:

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

struct Foo {
    bar: Box<IEvent<Error = ConversionError>>,
}
使用stdweb::private::ConversionError;
使用stdweb::web::event::IEvent;
结构Foo{
酒吧:盒子,
}
我得到一个类似这样的错误:

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

struct Foo {
    bar: Box<IEvent<Error = ConversionError>>,
}
error[E0221]:在`stdweb::traits::IEvent的边界中存在不明确的关联类型`error``
-->src/events.rs:16:21
|
16 |巴:盒子,
|^^^^^^^^^^^^^^^^^^^^^^^^^^^不明确的关联类型`错误`
|
注意:关联类型`stdweb::traits::IEvent`可以派生自`stdweb::unstable::TryFrom'`
-->src/events.rs:16:21
|
16 |巴:盒子,
|                     ^^^^^^^^^^^^^^^^^^^^^^^
注意:关联类型`stdweb::traits::IEvent`可以派生自`stdweb::unstable::TryFrom'`
-->src/events.rs:16:21
|
16 |巴:盒子,
|                     ^^^^^^^^^^^^^^^^^^^^^^^
如果您想了解有关此错误的更多信息,请尝试使用“rustc--explain E0221”
如何编写语法来设置相关的
错误
类型(针对traits
TryFrom
TryFrom
)?

我不相信您可以

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

定义自己的中间特性没有帮助,因为它使用相同的语法来约束关联的类型。即使修改
stdweb
中的traits也似乎不起作用,因为试图将
TryFrom::Error
类型约束为中的关联类型,例如,
ReferenceType
会产生一个循环依赖项,编译器会拒绝该依赖项。更改
ReferenceType
以接受用于直接约束
错误
类型的泛型类型参数也不能满足此要求

有可能这只是一个边缘情况,语言还不能处理。如果其他人没有提出解决方案,我建议用一个完整的激励性示例在中打开一个问题


我能想到的唯一其他解决方案是修改stdweb,使其不使用来自约束的多个
尝试。

Oof。谢谢你的彻底调查!如果我没有得到任何回复,我会按照你的建议提出问题。