美文网首页
一些运算符

一些运算符

作者: 胖红Red | 来源:发表于2017-08-21 17:44 被阅读11次
    >>>

    已经定义的运算符 >>> 是左结合的 (left-associative),就像 Unix 的管道一样,滤镜将以从 左到右的顺序被应用到图像上。
    我们定义的组合滤镜运算符是一个复合函数的例子。在数学中,f 和 g 两个函数构成的复合函 数有时候被写作 f · g,表示定义的新函数将输入的 x 映射到 f(g(x))。除了顺序,这恰恰也是 我们的 >>> 运算符所做的:将一个图像参数传递给运算符操作的两个滤镜。

    ->

    函数中的箭头 -> 向右结合。这也就是说,你可以将 A -> B -> C 理解为 A -> (B -> C)。然而在 本书中,我们通常会为函数类型引入一个类型别名 (像我们对 Region 和 Filter 类型做的处理一 样),或者是显式地写括号来提升代码的可读性。

    科里化

    如何将一个接受多参数的函数变换为一系列只接受单个参数 的函数,这个过程被称为柯里化 (Currying)

     func add1(x: Int, _ y: Int) -> Int {
                       return x + y 
     }
    add1 函数接受两个整型参数并返回它们的和;然而在 Swift 中,我们对该函数的定义还可以有 另一个版本:
     func add2(x:Int) -> (Int -> Int) { return{ y in returnx +y }
    }
    

    这里的 add2 函数接受第一个参数 x 之后,返回一个闭包,然后等待第二个参数 y。这两个 add
    函数的调用方法自然也是不同的:

    add1(1, 2)
    
    add2(1)(2)
    

    在第一种方法中,我们将两个参数同时传递给 add1;而第二种方法则首先向函数传递第一个参 数 1,然后将返回的函数应用到第二个参数 2。两个版本是完全等价的:我们可以根据 add2 来 定义 add1,反之亦然。

    在 Swift 中,我们甚至可以省略 add2 函数的一个 return 关键字和返回类型中的某些括号,然 后写为下面这样:

    func add2(x: Int) -> Int -> Int { return { y in x + y }
    }
    

    相关文章

      网友评论

          本文标题:一些运算符

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