Я вижу эту функцию в книге Функциональное программирование в Swift , но я не понимаю эту подпись функции, что означает тип возврата этой функции?Swift: как вы понимаете эту функцию: func curry <A, B, C> (f: (A, B) -> C) -> A -> B -> C
func curry<A, B, C>(f: (A, B) -> C) -> A -> B -> C
{
return { x in { y in f(x, y) } }
}
Edit:
Является ли эта функция используется, как это?
fun add(a: Int, b: Int) -> Int {
return a + b
}
let curriedAdd = curry(add)
//to add 1 and 2
let resultOf1Plus2 = curriedAdd(1)(2)
о радости видеть Mac программистов задают вопросы о функциональных типах. ... спасибо яблоко! – nicolas
Я нахожу в Swift, что удаление пробелов и добавление круглых скобок к составным типам делает такой код намного, многое, _much_ более легким для чтения. Поэтому я бы написал первую строку вашей функции как ** 'func curry (f: (A, B) -> C) -> (A) -> (B-> C)' ** –
Кроме того, typealiases могут сделать функцию-тип-args намного легче читать, поэтому, если бы это был мой собственный код, я бы, вероятно, остановился на чем-то вроде ** 'typealias CurryInFunc = (A, B) -> C; typealias CurryOutFunc = (A) -> ((B) -> C); func curry (f: @escaping CurryInFunc ) -> CurryOutFunc {...} '** _ (тестирование и работа в Swift 3) _. –