M F*_*yck 4 traits orphan rust
我正在修改一些代码以依赖于 rand 0.5 版。起初,我担心如何使用 生成我自己类型的随机值Standard,但我发现这是合法的:
impl ::rand::distributions::Distribution<MyType> for ::rand::distributions::Standard {
// ...
}
Run Code Online (Sandbox Code Playgroud)
为什么是合法的?我认为为外部类型实现外部特征是非法的。
这些规则(称为孤儿规则或一致性规则)的全部目的是避免给定特征/类型组合的任何冲突实现。从 Rust 1.0 开始,人们认为,对于允许谁为类型实现 trait 的“随意”,这不符合一种力求稳固稳定性的语言。
这种特定类型的实现的一个非常常见的例子是From:
impl From<MyType> for i32 {
// ...
}
Run Code Online (Sandbox Code Playgroud)
通过使用本地类型参数化特征,对于谁在实现特征仍然没有歧义。考虑它的一种方法是将其Distribution视为不是特征而是特征构造函数 1。的每个实例Distribution都会创建一个新特征,这是为案例定制的。
也可以看看:
1 — 这不是真的,但这是一个合理的类比。
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |