我有一个特征 Foo
继承自另一个特征 Bar
. Bar
具有关联类型 Baz
. Foo
约束 Baz
使 Baz
必须实施 Hoge
.
trait Hoge {}
trait Bar {
type Baz;
}
trait Foo: Bar where Self::Baz: Hoge {}
但是,当我定义一个通用函数需要泛型类型 T
来实现 Foo
时,
// [DESIRED CODE]
fn fizz<T: Foo>(buzz: T) {
// ...
}
rustc
抱怨 EO277
,除非我明确约束 T
:
fn fizz<T: Foo>(buzz: T) where T::Baz: Hoge {
// ...
}
我不明白为什么我需要这样做 . 我希望能够写出 [DESIRED CODE]
. 建议的方法是什么?
1 回答
可悲的是(或不),你必须重复这个界限 .
去年我开了一个issue,认为类型检查器不一致 . 代码与您的代码类似 .
@ arielb1关闭了这个问题并说这是预期的行为并给出了这样的解释:
今天我打开了issue请求将此信息添加到文档中 .