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