如果我有一长串必须在很多地方重复的类型界限,我该如何给它们命名?
例如,如果不是:
fn foo<T: Thing>(t: T) -> T
where T: Copy, T: Debug { ... }
Run Code Online (Sandbox Code Playgroud)
我想写:
fn foo<T: Thing>(t: T) -> T
where T: CopyDebug { ... }
Run Code Online (Sandbox Code Playgroud)
在哪里CopyDebug定义为Copy+Debug?
您可以通过创建一个空特征来将类型界限列表组合成单个特征,该空特征需要其实现者的完整类型界限列表,如下所示:
trait MyCombination: A + B + C + D {}
impl<T: A + B + C + D> MyCombination for T {}
Run Code Online (Sandbox Code Playgroud)
所以对于 的情况CopyDebug,你可以写:
trait CopyDebug: Copy + Debug {}
impl<T: Copy + Debug> CopyDebug for T {}
Run Code Online (Sandbox Code Playgroud)
如果您使用夜间 Rust,则可以使用夜间功能trait_alias( https://doc.rust-lang.org/unstable-book/language-features/trait-alias.html )
trait CopyDebug = Copy + Debug;
Run Code Online (Sandbox Code Playgroud)
然后任何满足两者的类型Copy也Debug将自动满足CopyDebug。
因为此功能是夜间功能,所以您需要将其放在#![feature(trait_alias)]crate 主文件的顶部。
| 归档时间: |
|
| 查看次数: |
259 次 |
| 最近记录: |