如何在Swift中实现非本地退出?

如何在Swift中实现非本地退出?,swift,Swift,我知道这一点,但是有没有其他方法可以让我在不返回中间函数的情况下,从一个函数退出到堆栈的更高层?例如,在下面的代码中,是否可以从d()直接返回到a(),以便只执行第一条打印语句(在a()中) func a() { b() println("returned to a()") } func b() { c() println("returned to b()") } func c() { d() println("returned to d()")

我知道这一点,但是有没有其他方法可以让我在不返回中间函数的情况下,从一个函数退出到堆栈的更高层?例如,在下面的代码中,是否可以从
d()
直接返回到
a()
,以便只执行第一条打印语句(在
a()
中)

func a() {
    b()
    println("returned to a()")
}
func b() {
    c()
    println("returned to b()")
}
func c() {
    d()
    println("returned to d()")
}
func d() {
    // exit to a()
}

a()

如果Swift确实有try/catch,我可以简单地将对
b()
的调用包装为
try
,并在
d()
中抛出一个异常。不,Swift在核心语言中没有这样的功能。可能会有黑客对其进行处理(手动操作堆栈等),但解决此问题的最佳方法是只返回一些指示其退出状态的值,并始终检查函数调用的结果。像在C中一样,

一旦在语言中引入了异常,就会出现更高级的控制结构,例如带有当前延续的
调用或与出租方相关的调用。现在什么都没有。

这是X/Y问题。你最初的问题是什么?如果你只想知道“可能吗”,我想现在正确的答案是否定的。我真的想知道“可能吗”——我希望比我聪明的人能想出一个办法来做到这一点。它有很多用例,这是一种干净的方法,但我知道替代方案是什么以及如何使用它们。它不受支持,因为没有足够的有效用例来支持它。所以很可能有更好的替代品,人们不需要这样的功能。同样,这是不可能的,也不是真正有用的。