顶级语句不能以闭包表达式开头
top-level statement cannot begin with a closure expression
我正在使用这个 online compiler 学习 Swift 中的匿名函数和“定义并调用”函数(因为我没有 Mac),并且我编写此代码以通过创建一个匿名函数来尝试我所学到的知识,该函数将两个数字相加并打印结果:
{
(a:Int, b:Int) -> Void in
print(a + b)
} (2,3)
当我尝试运行这个函数时,编译器给我一个错误:
main.swift:10:1: error: top-level statement cannot begin with a closure expression
{
^
...Program finished with exit code 0
我通过创建第二个函数来解决这个问题:
func doIt() {
{
(a:Int, b:Int) -> Void in
print(a + b)
} (2,3)
}
doIt()
但是,我不确定这是否是正确的方法,因为我不明白为什么编译器不让我 运行 调用匿名函数。编译器还提到我写的文件 main.swift
,我听说它允许可执行代码在顶层 运行。
有人可以指导我正确的方向吗?
源码里好像有解释原因:
// Expressions can't begin with a closure literal at statement position.
// This prevents potential ambiguities with trailing closure syntax.
if (Tok.is(tok::l_brace)) {
diagnose(Tok, diag::statement_begins_with_closure);
}
如果您想直接运行,可以将代码包装在 do {}
中
do {
{ (a:Int, b:Int) -> Void in
print(a + b)
} (2,3)
}
或者您可以从闭包中创建一个变量,然后使用该变量调用它
let doIt = { (a:Int, b:Int) -> Void in
print(a + b)
}
doIt(2,3)
我正在使用这个 online compiler 学习 Swift 中的匿名函数和“定义并调用”函数(因为我没有 Mac),并且我编写此代码以通过创建一个匿名函数来尝试我所学到的知识,该函数将两个数字相加并打印结果:
{
(a:Int, b:Int) -> Void in
print(a + b)
} (2,3)
当我尝试运行这个函数时,编译器给我一个错误:
main.swift:10:1: error: top-level statement cannot begin with a closure expression
{
^
...Program finished with exit code 0
我通过创建第二个函数来解决这个问题:
func doIt() {
{
(a:Int, b:Int) -> Void in
print(a + b)
} (2,3)
}
doIt()
但是,我不确定这是否是正确的方法,因为我不明白为什么编译器不让我 运行 调用匿名函数。编译器还提到我写的文件 main.swift
,我听说它允许可执行代码在顶层 运行。
有人可以指导我正确的方向吗?
源码里好像有解释原因:
// Expressions can't begin with a closure literal at statement position.
// This prevents potential ambiguities with trailing closure syntax.
if (Tok.is(tok::l_brace)) {
diagnose(Tok, diag::statement_begins_with_closure);
}
如果您想直接运行,可以将代码包装在 do {}
中
do {
{ (a:Int, b:Int) -> Void in
print(a + b)
} (2,3)
}
或者您可以从闭包中创建一个变量,然后使用该变量调用它
let doIt = { (a:Int, b:Int) -> Void in
print(a + b)
}
doIt(2,3)