代码之家  ›  专栏  ›  技术社区  ›  tuledev

Swift 4中的Currying func[副本]

  •  1
  • tuledev  · 技术社区  · 6 年前

    Swift 4, 我怎么吃咖喱 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吗?

    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

    非常感谢。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Sweeper    6 年前

    在Swift 2中,您可以很容易地做到这一点:

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

    设结果=add3(b:5)//8

    Starting from Swift 3

    你必须这样做:

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

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