首页  

Scala 闭包 和 柯里化     所属分类 scala 浏览量 712
闭包 
函数嵌套 
在一个函数定义中,包含另外一个函数的定义
在内层函数中可以访问外层函数中的变量

def mulBy(factor:Double) = (x:Double) => x * factor
val triple = mulBy(3)
val half = mulBy(0.5)
triple(3)
half(3)


柯里化 Currying
柯里化函数(Curried Function)
把具有多个参数的函数转换为一条函数链,每个节点上是单一参数

普通函数
def add1(a:Int , b:Int) = a + b

// 柯里化函数
def add2(a:Int) = (b:Int) => a + b

// 柯里化函数 简写
def add3(a:Int)(b:Int) = a + b

add1(1,2)
val add2_1 = add2(1)
add2_1(2)

val add3_1 = add2(1)
add3_1(2)

add2(1)(2)
add3(1)(2)

注意不能写成 add1(1,2) 


def add5(a: Int) = { def add5Inner(b: Int) = { a + b } // 注意不要漏了这一行 // add5Inner _ add5Inner(_) } add5(1)(2)

上一篇     下一篇
scala 表达式/代码块 当参数

play action 各种写法

Scala函数调用省略点号和括号

scala 函数参数的求值策略

scala 元组

Scala中的 -> <- => {} ()