Mojo Academy · 课时

初识变更

更改数据而不破坏其他代码

第 4 / 4 课13 个步骤

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

有意地修改数据

独立副本很有用,但真实程序必须修改数据:更新 score、扩展列表。让我们安全地完成这些操作。✏️

修改您自己的 var

最简单的修改方式是重新为您拥有的 var 赋值。由于它是您的副本,修改只会影响您的值。

var score = 10
score = score + 5

局部修改不会产生副作用

编辑局部变量不会泄漏到外部。其他变量会保留原值,因此这次更改不会产生意外的副作用。

var a = 1
var b = a
a = 100

函数默认会获得副本

将值传递给函数时,函数会编辑该值的副本。函数外部的原值不会受到影响。

fn bump(n: Int) -> Int:
    return n + 1

但有时您确实想要进行更改

如果函数应该原地更新调用方的值,该怎么办?Mojo 允许您通过 inout 约定主动选择这种行为。

inout 表示原地修改

将参数标记为 inout 后,函数会直接操作调用方的实际值,因此所做的修改确实会保留下来。

fn double(inout n: Int):
    n = n * 2

修改是明确的,而非意外发生的

请注意,您必须有意写出 inout。Mojo 绝不会在您不知情的情况下修改调用方的值;您始终需要主动选择这种行为。

查看签名即可了解行为

函数签名会揭示其意图。看到 inout 时,您就知道值可能会改变;否则应当预期函数使用的是安全副本。

调用 inout 函数

使用您的变量调用它,并观察值在原处更新。函数按照设计访问了您的原值。

var n = 4
double(n)
print(n)

平衡的方法

Mojo 融合了两种方式:默认使用安全副本,只有在您要求时才进行有意的修改。这样既安全又灵活。

接下来会学到什么

这只是初步体验。稍后您将学习 owned 和转移运算符,从而完全掌控数据的移动方式。🚀

快速检查

您希望函数更改调用方的实际值,而不是副本。应该使用什么?

回顾

修改自己的变量是安全且局部的。要更改调用方的值,请使用 inout 主动选择;不会有任何值被意外修改。🎯

免费开始

用 AI 导师学习 Mojo — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
30
课程
120

常见问题解答

「初识变更」课时是免费的吗?

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

「初识变更」这节课中我会学到什么?

更改数据而不破坏其他代码 你通过在浏览器中直接运行的动手代码来练习 Mojo Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Mojo Academy 需要有经验吗?

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

「初识变更」课时需要多长时间?

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

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

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

此课程中的所有课时

  1. 值语义意味着什么
  2. 复制与共享状态
  3. Mojo 的安全默认行为
  4. 初识变更
← 返回 Mojo Academy