使用简单变量和函数的奇怪行为

问题描述 投票:0回答:1

我不明白为什么下面的代码的结果是如何获得的。请解释一下该过程的每一步。

您可以通过将 b 作为参数传递给 myFunc 来进行更多实验,但输出仍然相同。

let a = myFunc()
var b = 19

func myFunc() -> Int {
    b
}

func changeBAndGetA() -> Int  {
    b = 16
    return a
}

print(changeBAndGetA(), a, b)
// outputs 0 0 16

我预计它是 16 16 16。因为我读到全局变量是延迟计算的

swift
1个回答
0
投票

当 Swift 代码执行时,a 和 b 最初都被视为保留默认整数值 0。出现这种行为的原因是变量是在作用域内声明的,但在它们被调用时尚未显式赋值。首次访问。

您看到的行为类似于以下场景:

print(c)  /prints 0
var c = 5

在此示例中,即使 c 在显式设置为 5 之前被打印,编译器也会将其视为在使用时初始化为 0。这不会导致错误,因为文件中定义了“c”。

当第一行运行时,它将 a 设置为 b,即 0。当 print 语句运行时,它调用changeBAndGetA(),将 b 更改为 16,返回 a,即 0。然后打印 a,即 0,然后打印 b,即 0。

© www.soinside.com 2019 - 2024. All rights reserved.