Rust 如何创建一个特性来指定超级特性的关联类型?

Rust 如何创建一个特性来指定超级特性的关联类型?,rust,Rust,我想创建一个抽象trait,指定索引类型和值类型,其中实现trait的任何结构都必须实现Index和IndexMut,并定义Output类型,该类型在实现trait的每个结构中保持不变 我尝试创建一个trait,但似乎无法指定输出类型: 使用std::ops:{Index,IndexMut}; 结构协调; 结构光值; 特征光照图:索引+索引输出{} impl光照贴图{ 类型输出=轻值; } 警告:没有显式'dyn'的trait对象不推荐使用 -->src/lib.rs:8:6 | 8 | im

我想创建一个抽象trait,指定索引类型和值类型,其中实现trait的任何结构都必须实现
Index
IndexMut
,并定义
Output
类型,该类型在实现trait的每个结构中保持不变

我尝试创建一个trait,但似乎无法指定输出类型:

使用std::ops:{Index,IndexMut};
结构协调;
结构光值;
特征光照图:索引+索引输出{}
impl光照贴图{
类型输出=轻值;
}
警告:没有显式'dyn'的trait对象不推荐使用
-->src/lib.rs:8:6
|
8 | impl光照贴图{
|^^^^^^^^^帮助:使用'dyn':'dyn光照贴图`
|
=注意:`#[warn(bare_trait_objects)]`默认为打开
错误[E0191]:必须指定关联类型“Output”(来自trait“std::ops::Index`)的值
-->src/lib.rs:8:6
|
8 | impl光照贴图{
|必须指定关联的类型“Output”
错误[E0202]:内在impl中尚不支持关联类型(请参见#8995)
-->src/lib.rs:9:5
|
9 |类型输出=光值;
|     ^^^^^^^^^^^^^^^^^^^^^^^^^

如果我没有指定输出类型,则必须指定
关联类型输出
在我尝试使用特征的任何地方都会发生。

您需要将关联类型的限制放在超级特征上:

trait LightMap: Index<Coord, Output = LightValue> + IndexMut<Coord> {}
trait LightMap:Index+IndexMut{}
另见: