swift - Swift 4 中的柯里化(Currying)函数

标签 swift functional-programming

<分区>

Swift 4 中,我如何 curry func ,或类似的东西:

func doSomething(a: A, b: B, c: C) {
}

let do_a = doSomething(a: value_a)
let do_ab = do_a(b: value_b)
let result = do_ab(c: value_c)

在 JS 中,我们可以做:

const sum = x => y => x + y;

// returns a function y => 2 + y
sum (2);

// returns the number 3
sum (2)(1);

我在这里阅读了答案 Curry Function in Swift

但是我想问一下当前的Swift(Swift 4)。我可以避免创建通用函数吗?

func curry<A,B,C,D,E>(f: (A, B, C, D) -> E) -> A -> B -> C -> D -> E

这篇文章非常有用:https://robots.thoughtbot.com/introduction-to-function-currying-in-swift

但是是2014年的

谢谢。

最佳答案

你过去可以在 Swift 2 中很容易地做到这一点:

func add(a: Int)(b: Int) -> Int {
    return a + b
}

令 add3 = add(3) let result = add3(b: 5)//8

Starting from Swift 3 , 这不再是有效的语法。

你必须这样做:

func add(_ a: Int) -> (Int) -> Int {
    return { $0 + a }
}

对于三个参数,这会更长更难理解。我建议您不要这样做。

关于swift - Swift 4 中的柯里化(Currying)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50480834/

相关文章:

swift : Enum 'cannot be constructed because it has no accessible initializers'

swift - Flutter: Firebase_Analytics - 架构 x86_64: "_OBJC_CLASS_$_FIRAnalytics"的 undefined symbol ,引用自:

javascript - 使用 Ramda 根据键名称模式来乘法和转换数组的对象。返回新平面数组中的所有内容

arrays - 在 Swift 中将整数从文本字段转换为数组

ios - 如何通过引用在 View Controller 之间传递数组对象

functional-programming - Common Lisp 中的 (compose)

algorithm - 为什么确定一个函数是否是纯函数很困难?

haskell - 偶数索引上列表的重复元素

java - future 事件/Java 类完成时发生操作的模式的名称

ios - 在表格 View 单元格 Swift 4 上显示文件上传进度