Rust 特征边界与类型

Posted

技术标签:

【中文标题】Rust 特征边界与类型【英文标题】:Rust trait bounds with types 【发布时间】:2020-08-17 00:05:39 【问题描述】:

我在阅读hyperium/http源代码,发现this:

pub fn put<T>(uri: T) -> Builder
 where
    Uri: TryFrom<T>,
    <Uri as TryFrom<T>>::Error: Into<crate::Error>,


    Builder::new().method(Method::PUT).uri(uri)
   

在这个 sn-p 中,Uri 是一个类型,T 是一个通用元素。 我一直看到where T: SomeTrait 的构造,但没有看到SomeType: SomeTrait&lt;T&gt;。 这种结构有名称吗?它是否记录在某处?

【问题讨论】:

【参考方案1】:

引用https://doc.rust-lang.org/reference/trait-bounds.html#higher-ranked-trait-bounds:

使用物品时必须满足物品的界限。当类型 检查和借用检查通用项目,边界可用于 确定为一个类型实现了一个特征。例如,给定 Ty: Trait

在泛型函数的主体中,来自Trait 的方法可以在Ty 值上调用。 Trait 上的类似关联常量可以是 用过的。 可以使用来自Trait 的关联类型。 具有T: Trait 边界的泛型函数和类型可以与Ty 一起用于T

没有说明Ty 是类型参数(而不是固定类型)。所以我会说它只是一个 trait bound,尽管在 Rust 教程中并不经常遇到。

【讨论】:

以上是关于Rust 特征边界与类型的主要内容,如果未能解决你的问题,请参考以下文章

Rust 社区 RFC 导读 | 构建安全的 I/O

图像特征提取与描述

感想及阅读内容

在散点图上绘制隐式函数(逻辑回归中的决策边界)

点云聚类与区域边界估计

为啥作为参数传递的特征对象的生命周期需要更高等级的特征边界,而结构不需要?