Swift REPL和swiftc编译器如何不同地解释该语言?

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

Swift具有编译器(swiftc)和REPL。我喜欢使用REPL学习和使用语言构造。

在我的一项实验中,我发现“ let”是如何工作的显着差异。

正如我所期望的,以下是swiftc中不允许的,但是REPL允许。

let x = 10
let x = 20 // ok in REPL

现在我想知道还有什么其他区别。它们在任何地方都有记录吗?

swift read-eval-print-loop
1个回答
0
投票

在REPL环境中,您希望want能够重新声明变量,对吗?否则,当您继续使用REPL并声明越来越多的变量,let常量,函数,类等时,将用尽所有名称!

例如,假设您要尝试字符串插值:

let x = 10
print("x is \(x)!")

然后过了一会儿,您了解了字符串连接,并且也想尝试一下。此时,您希望能够重新声明一个let常量x,对吗?

let x = "A"
let y = "B"
print(x + y)

您可能会争辩说可以使用ab,但是随着时间的流逝,您会慢慢用尽名称。 REPL是这样设计的,因此您不必非常频繁地重新启动REPL。

因此,每次提交内容时,在提交中也声明过的先前声明的符号将被覆盖。

swiftc具有完全不同的用例-您通常使用它来编译大型程序,而不仅仅是几行代码。在这种情况下,全局范围将具有更少的符号,并且重新声明变量实际上是不实际实现的,因为代码的执行不是从上到下都是线性的。可能还会有多个文件互相通信。您如何找出重新声明的内容?在REPL之外的任何地方都没有这样做的必要。

[其他REPL也具有此功能,例如C#和csharppad.compython,因此,在实现REPL时,这实际上只是您的日常工作,没有特殊之处。

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