2016-05-29 2 views
0

Как функция «+» возвращает массив, который похож на его добавление всех предыдущих чисел каждого индекса? Я получаю 0 + 1 = 1, 1 + 2 = 3, 1 + 2 + 3 + 4 = 10, но у меня возникают проблемы с подключением того, как функция комбайна делает это с помощью только «+»Что такое закрытие «+» в этом расширении массива?

extension Array { 
func accumulate<U>(initial: U, combine: (U, Element) -> U) -> [U] { 
    var running = initial 
    return self.map { next in 
     running = combine(running, next) 
     return running 
     } 
    } 
} 

let test = [1,2,3,4] 
test.accumulate(0, combine: +) 
// returns [1, 3, 6, 10] 
+0

Это просто демонстрация того, как работает встроенный 'reduce'. Объясняется в этом разделе моей онлайн-книги: http://www.apeth.com/swiftBook/ch04.html#_array_enumeration_and_transformation – matt

+0

Посмотрите раздел «Функции оператора» в ссылке Swift. –

+0

@MartinR: Спасибо, это недостающая часть, которую мне нужно было соединить точки –

ответ

1

combine - это функция. Высказывание combine(running, next)вызывает эту функцию, которая принимает два параметра. В Swift, + (как и любой другой оператор) is a функция. Таким образом, когда combine равно +, вызов combine добавляет running в next и возвращает результат.