本文是 rust 社区大神 quinedot 的系列文章 的翻译版。我在国内各个平台似乎都没有看到现存的翻译,因此尝试做些搬运工作。由于本人的技术和翻译水平都非常有限,难免有错误,非常欢迎大家对不当之处进行指正。 这是本系列文章的第 3 篇。 1. 前言 在 rust 中,我们通常使用强制类型转换(coercion)来将一些类型转换为特征对象,下面…
本文是 rust 社区大神 quinedot 的系列文章 的翻译版。我在国内各个平台似乎都没有看到现存的翻译,因此尝试做些搬运工作。由于本人的技术和翻译水平都非常有限,难免有错误,非常欢迎大家对不当之处进行指正。 这是本系列文章的第 2 篇。 1. 前言 dyn Trait 作为所有实现了 Trait 的 base type 的抽象,其自身当然也需…
1. 译者注 本文是 rust 社区大神 quinedot 的系列文章 的翻译版。我在国内各个平台似乎都没有看到现存的翻译,因此尝试做些搬运工作。由于本人的技术和翻译水平都非常有限,难免有错误,非常欢迎大家对翻译不当之处进行指正。 这是本系列文章的第 1 篇。 一些比较难以定夺的翻译: base type 原作者在文中大量使用该词,其本意是指实现了…
1. Fn, FnMut, FnOnce 1.1. 讨论的范畴:闭包 or 通常函数 讨论这三个 trait 时,通常是关于闭包的。普通的 rust 函数被视为实现了以上所有三个trait。可以用下面这段代码证明: fn apply_fn<T>(value: T, f: impl Fn(T) -> T) -> T { f(v…
1. 场景 当我们需要用特征对象的时候,大部分情况下 Rust 编译器可以自动进行类型推断。但是在少数场景下,我们可能需要显式声明特征对象,其中一个例子就是引用 + 关联类型同时出现。 直接来看一个例子,为了更加形象地解释,我们用服务器端程序的场景来命名出现的类型和特征。首先,我们需要一个 Listener 的 trait: trait Liste…
1. 摘要 当我们在写工厂方法时,有时会希望同时返回两个值:一个目标对象 + 对该对象某个成员的引用。这种设计初听起来可能非常不合理,但是当使用某些封装不太完美的第三方库时是可能出现的。举个例子:我们需要一个对象 A(A 由第三方库提供,因而无法改造),而又要构造一个工具对象 B,其中 B 又持有 A 中某个成员的引用。 显然,A 和 B 是强绑定…