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<T>
。
这种结构有名称吗?它是否记录在某处?
【问题讨论】:
【参考方案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 特征边界与类型的主要内容,如果未能解决你的问题,请参考以下文章