0Pricing
Mojo Academy · 课时

基于 Trait 的泛型函数

为多种类型编写一个函数

基于 Trait 的泛型函数 是 CoddyKit 上的免费 Mojo Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Mojo Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Mojo Academy 课程共包含 4 节课。

一个函数,多种类型

特征的真正力量在于通用代码:只需编写一次函数,它就能用于所有符合特征的类型。🚀

将特征作为约束

您可以将特征用作通用参数的约束,以保证该类型拥有您要调用的方法。

通用参数语法

在方括号中指定类型参数及其必须满足的特征,然后像使用任何类型一样使用它。

fn announce[T: Greetable](item: T):
    print(item.greet())

调用特征方法

在函数内部,您可以调用特征所保证的任何方法。编译器知道 T 上存在 greet。

适用于每个符合者

将 Dog 或 Robot 传递给同一个函数。它们都符合 Greetable,因此都能顺利通过。

announce(Dog("Rex"))
announce(Robot())

类型安全依然存在

通用代码并不宽松。如果类型不满足约束,编译器会在程序运行前拒绝它。

没有运行时开销

Mojo 会在编译时专门化通用代码,为每种类型生成快速版本。灵活性不会牺牲速度。

减少重复

没有通用代码时,您需要为每种类型复制一个函数。特征约束让一个定义服务所有类型,减少重复。

多个约束

一个参数可以同时要求多个特征,确保类型具备函数所需的全部能力。

围绕特征进行设计

优秀的 Mojo API 只要求所需的最小特征。这样函数既保持灵活,又能表达确切要求。

全貌

特征、符合关系和通用代码可以组合起来:定义契约、实现契约,然后围绕它编写一个可复用的函数。

fn print_all[T: Stringable](x: T):
    print(String(x))

快速检查

为什么要在通用函数上使用特征约束?

回顾

带有特征约束的通用函数可以处理所有符合特征的类型,同时保持类型安全和高性能。现在您已经会编写可复用的 Mojo 代码了!🎉

常见问题解答

「基于 Trait 的泛型函数」课时是免费的吗?

是的 — 「基于 Trait 的泛型函数」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Mojo Academy 课程的其余内容,请升级到 CoddyKit PRO。 Mojo Academy 课程共包含 4 节课。

「基于 Trait 的泛型函数」这节课中我会学到什么?

为多种类型编写一个函数 你通过在浏览器中直接运行的动手代码来练习 Mojo Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Mojo Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Mojo Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「基于 Trait 的泛型函数」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Mojo Academy 课中编写并运行代码吗?

能。每节 Mojo Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 什么是 Trait
  2. 让 Struct 遵循 Trait
  3. 像 Copyable 这样的内置 Trait
  4. 基于 Trait 的泛型函数
← 返回 Mojo Academy