gpt4 book ai didi

swift - 允许 inout 参数的默认值

转载 作者:行者123 更新时间:2023-12-04 08:07:21 29 4
gpt4 key购买 nike

标题可能有点令人困惑,所以让我向您解释一下。
在 Swift 中,我们可以拥有带有默认参数值的函数,例如:

func foo(value: Int = 32) { }
我们也可以有 In-Out 参数,例如
func foo(value: inout Int) { }
但是,有没有办法两者兼得?一个 inout 参数,如果没有传递,我们可以创建?这对于递归函数特别有用,我正在尝试解决这个问题。

最佳答案

默认参数大多只是一种方便的重载简写。当您想超越基础时,您只需手动构建重载,这允许您实现任何您想要的复杂程度:

// The base-case version
func foo() {
var value = 0
foo(value: &value)
}

func foo(value: inout Int) { }
作为旁注,在 Swift 中使用递归要非常小心。没有尾调用优化,所以如果递归很深,你可以炸毁堆栈。缺乏优雅的模式匹配使得递归代码变得不那么优雅,并且通过 inout 传递值。使优化器上的事情变得更难。在大多数情况下,您需要一个循环(或将循环隐藏在高阶非递归函数中,例如 map )。
另外,不要忘记嵌套函数,这有助于隐藏累加器样式的参数。
func foo() {
var value = 0

func f() {
// operate on value and recurse
// no need for inout; and doesn't leak the implementation detail
}

f()
}

关于swift - 允许 inout 参数的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66164083/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com