最新文章

Scala笔记:用函数字面量块调用高阶函数

Scala笔记:用函数字面量块调用高阶函数

这里会用到几个概念高阶函数、函数字面量、参数组

高阶函数

high-order function 函数的一种,简单来说它包含了一个函数类型的参数或者返回值。

所谓的高阶是跟一阶函数相比,深入一下:

  1. 一个或多个参数是函数,并返回一个值。
  2. 返回一个函数,但没有参数是函数。
  3. 上述两者叠加:一个或多个参数是函数,并返回一个函数。

示例:

def stringSafeOp(s: String, f: String => String) = {
    if ( s != null) f(s) else s
}
//stringSafeOp: (s: String, f: String => String)String
def reverse(s: String)  = s.reverse
//reverse: (s: String)String
stringSafeOp("Ready", reverse)
//res86: String = ydaeR

函数字面量

function literal,其他名字:匿名函数、Lambda表达式等。 函数字面量可以存储在函数值和变量中,或者也可以定义为高阶函数调用的一部分。在任何接受函数类型的地方都可以使用函数字面量。

reverse的函数字面量定义:

val reverse = (s:String) => s.reverse

(s:String) => s.reverse定义了一个有类型的输入参数(s:String)和函数体(s.reverse)。

定义为高阶函数调用的一部分:

stringSafeOp("Ready", (s:String) => s.reverse)

由于已经定义了参数f的类型String => String,可以从函数字面量中删除显示类型,交由编译器自动推导其类型。