美文网首页
一些运算符

一些运算符

作者: 胖红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 }
}

相关文章

  • Swift高级运算符

    Swift相比OC在运算符上做了一些改变, 但是基本的运算符,比如 +,-,*,/,%, 逻辑运算符,比如 &&,...

  • 八、Java中的运算符(二)

    在Java中的运算符(一)中介绍了比较常见的一些运算符,这一节主要围绕一些运算符的用法,以及介绍一些位运算等较复杂...

  • Javascript中特殊的运算符

    常用的一些运算符 一元运算符: + - ++ -- ! ~(按位取反)①一元运算符具有右结合性...

  • Swift自定义运算符

    自定义运算符 标准的运算符不够玩,那你可以声明一些个性的运算符,但个性的运算符只能使用这些字符/ = - + * ...

  • 算数运算符

    算数运算符 加法运算符: 加法运算符由加号(+)表示: (ECMAScript中的加法也有一些特殊行为:某个运算数...

  • 运算符优先级和结合性

    运算符优先级和结合性 运算符的优先级使得一些运算符优于其他运算符,高优先级的运算符会被先计算。 结合性定义了具有相...

  • Dart学习-操作符

    dart定义了下表所示的运算符。你可以重写许多这些运算符。 使用运算符时,可以创建表达式。以下是运算符表达式的一些...

  • C++面向对象-运算符重载

    运算符重载 运算符重载又称为操作符重载,可以为运算符增加一些新的功能,全局函数和成员函数都支持运算符重载,我们通过...

  • Wireshark运算符!=无法正常工作

    Wireshark运算符!=无法正常工作 在Wireshark中,运算符!=结合一些类似eth.addr、ip.a...

  • 位运算

    位运算符比一般的算术运算符速度要快,而且可以实现一些算术运算符不能实现的功能。如果要开发高效率程序,位运算符是必不...

网友评论

      本文标题:一些运算符

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