返回介绍

引用类型与 null

发布于 2024-01-08 20:55:54 字数 7244 浏览 0 评论 0 收藏 0

引用类型对应的是值类型,这是两种数据的存储方式。

值类型

我们来看这段代码:

var a = 10
var b = a
a += 10
print(a)
print(b)

这段代码会输出两个数字,依次是 2010,下面是解释:

  • 首先,我们声明了个变量 a,里面存放了 10,然后定义变量 b,里面存放 a 的值,所以 b 中也存放了一个 10。

  • 接下来我们对 a 自增 10,使得 a 变量的值变成了 20,此时我们的游戏中就有了两个数字,分别是 20 和 10。

  • 也就是说 var b = a 这一行代码,会将 a 的值复制一份存到变量 b 中,实际上两个变量的值互不影响。

这种类型的数据,就被称为值类型数据。

我们学过的数字字符串布尔值都是这种值类型数据,而数组是引用类型数据。

引用类型数据

再来看一段类似的代码:

var a = [1, 2]
var b = a
a.append(10)
print(a)
print(b)

这段程序会输出两个 [1, 2, 10]

这是因为数组是引用类型的数据,当执行 var a = [1, 2] 这一行时,变量 a 实际存放的并不是这个数组,而是这个数组的引用

接下来 var b = a 这一行,我们将 a 赋值给 b,实际上就是将这个数组的引用赋值给了变量 b,所以,变量 a 和 b 存放的是同一个数组的引用

所以在后续代码中,不论是调用 a.append 还是 b.append,实际上都是对同一个数组进行操作,因此在最后 print 时两个变量输出的其实是同一个数组。

这种引用类型的数据,除了数组外还有很多,例如绝大多数类的实例都是引用类型,自然也就包括各种节点。

所以我们使用 var 输入框1 = $LineEdit,然后 var 输入框2 = 输入框1,实际上这两个输入框变量指向的都是同一个输入框。

null

null 表示没有数据,我们可以写一句 var a = null 来表示变量 a 中什么都不存放。

某些情况下我们会意外的得到一些 null,例如使用 $ 获取一个不存在的节点时,它就会返回 null。

记住,null 并不是什么好东西,比如我们执行下面的代码:

var 输入框 = $输入框节点名
print(输入框.text)

如果场景中并没有叫做 输入框节点名 的输入框,输入框 变量就会存放一个 null,此时下一行就出问题了,因为 null 并没有 text 属性,于是我们就得到了一个错误。

所以,当我们不能断定某些操作是否会得到 null 时,一定要使用 if 语句判断一下:

var 输入框 = $输入框节点名
if 输入框 == null:
    print("没获取到输入框")
else:
    print(输入框.text)

这里的 if 输入框 == null 还可以写成 if 输入框 is null

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文