美文网首页
03 高级函数

03 高级函数

作者: zzzzzzzgk | 来源:发表于2016-09-10 22:44 被阅读0次

1。函数作为返回值

任意多参函数都可以柯里化,
a->b->c可以理解为 a->(b->c)
swift中 (A,B)->C可以转化为(A) ->( B -> C)(B) -> (A -> C)
一个函数可以经过简单的转化为三个函数

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

add(3, b: 5)

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

add1(3)(5)

func add3(a:Int)->Int->Int->Int{
    return { b in
        return { c in
            return a + b + c
        }
    }
}
add3(3)(5)(6)
 //14
add3(3)
//Int ->Int->Int

柯里化带来的好处是可以不全调用一个函数得到一个新的函数
未柯里化的函数要调用这个函数,要闭包才能调用,而柯里化直接就可以调用

[1,2,3,4,5,6].map(add1(3))
//[4, 5, 6, 7, 8, 9]
[1,2,3,4,5,6].map(add1(4))
//[5, 6, 7, 8, 9, 10]
[1,2,3,4,5,6].map { i in
    add(i,b:3)
}
//[4, 5, 6, 7, 8, 9]

2。函数作为参数

函数是对于过程的抽象,函数作为参数就是对于函数的抽象

//数组中只留大于3的数 函数
func great3(arr:[Int])->[Int]{
    var arr1 = [Int]()
    for i in arr{
        if i > 3{
            arr1.append(i)
        }
    }
    return arr1
}

//数组中只保留被2整除的函数
func mod2Equ0(arr:[Int])->[Int]{
    var arr1 = [Int]()
    for i in arr{
        if i % 2 == 0{
            arr1.append(i)
        }
    }
    return arr1
}

//filter函数
func filter<A>(arr:[A],include: A -> Bool) -> [A]{
    var arr1 = [A]()
    for i in arr{
        if include(i){
            arr1.append(i)
        }
    }
    return arr1
}

3。函数组合

4。swfit 中的高级函数

相关文章

网友评论

      本文标题:03 高级函数

      本文链接:https://www.haomeiwen.com/subject/otzyettx.html