4 个版本
0.1.0 | 2020年9月1日 |
---|---|
0.0.3 | 2020年8月14日 |
0.0.2 | 2020年7月19日 |
0.0.1 | 2020年7月19日 |
#1290 in Rust 模式
12KB
75 行
变异性
变异性是一组类似于 PhantomData
的标记类型,它使得指定泛型类型相对于其参数的变异性变得更容易。
入门
可以在 crates.io 上找到 Variance crate。将以下依赖项添加到您的 Cargo 清单中
[dependencies]
type-variance = "0.1.0"
查看 文档 获取详细使用信息。
示例
该软件包提供了三个零大小标记类型:Covariant<T>
、Contravariant<T>
和 Invariant<T>
,每个都标记给定的类型参数具有相应的变异性。
例如
use type_variance::{Covariant, Contravariant};
// UnaryFunction is a zero-sized type that is covariant to `Arg` and
// contravariant to `Ret`.
struct UnaryFunction<Arg, Ret> {
arg: Covariant<Arg>,
ret: Contravariant<Ret>,
}
fn foo<'sup>() {
// Here, the type &'static() is a subtype of &'sup().
// Therefore, `Arg` may be replaced with a subtype and `Ret` may be
// replaced with a supertype.
let _func: UnaryFunction<&'sup(), &'static()> = UnaryFunction {
arg: Covariant::<&'static()>::default(),
ret: Contravariant::<&'sup()>::default(),
};
}
许可证
该软件包采用 MIT 许可证。