Передача замыкания в качестве аргумента другой функции не будет работать

У меня есть функция evaluate это принимает аргументы. Первый аргумент Int, Второй аргумент замыкания, который принимает Int и возвращает Double, Функция evaluate затем возвращает [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($0 * $0 * $0 + 2 * $0 + 4) }

print(evaluate(5, polyTableClosure))

Ожидая что-то вроде: [7, 16, 37, 76, 139]

1 ответ

Решение

myFunction: ярлык отсутствует. Ваш зов evaluate должно быть:

evaluate(5, myFunction: polyTableClosure)

Кроме того, доступ к пустому массиву по индексу i не будет создавать новый слот по этому индексу. Это не удастся.

Вы должны добавить в массив:

for i in 1...n {
    doubles.append(myFunction(i))
}
Другие вопросы по тегам