将闭包作为参数传递给另一个函数是行不通的

Passing a Closure as an Argument to another Function won't work

我有一个接受参数的函数 evaluate。第一个参数是 Int。闭包的第二个参数采用 Int 和 returns 和 Double。函数evaluate然后returns一个[Double]。返回数组的第 k 个元素是对 k 的第二个参数求值的结果 k = 0 , 1, ..., n.

func evaluate(n: Int, myFunction: Int -> Double) -> [Double] {
    var doubles = [Double]()
    for i in 1...n {
        doubles[i] = myFunction(i)
    }

    return doubles
}

let polyTableClosure: Int -> Double = { return Double([=10=] * [=10=] * [=10=] + 2 * [=10=] + 4) }

print(evaluate(5, polyTableClosure))

期待这样的结果:[7, 16, 37, 76, 139]

缺少 myFunction: 标签。您对 evaluate 的调用应该是:

evaluate(5, myFunction: polyTableClosure)

此外,访问索引 i 处的空数组不会在该索引处创建新槽。它会失败。

您必须附加到数组:

for i in 1...n {
    doubles.append(myFunction(i))
}