基于 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 反馈 — 无需本地设置。
此课程中的所有课时
- 什么是 Trait
- 让 Struct 遵循 Trait
- 像 Copyable 这样的内置 Trait
- 基于 Trait 的泛型函数