【Scala】函数:偏应用函数、函数柯里化Currying

1、偏应用函数

偏应用函数就是一个表达式,可以在调用函数时, 只需要提供部分参数 或者 不需要提供参数。

下面展示了普通函数log 和 偏应用函数 logWithDateBound,本质上都是通过 log来实现的:

object Test {
	def main(args: Array[String]) {
		
		val date = new java.util.Date
		
		log(date,"---普通函数输出---")
		
		log(date,"INFO 1: xxx") 
		Thread.sleep(1000)
		
		log(date,"INFO 2: xxx") 
		Thread.sleep(1000)
		
		log(date,"INFO 3: xxx") 
		Thread.sleep(1000)
		
		//偏应用函数,就是一个表达式
		val logWithDateBound = log( date, _ : String )
		
		logWithDateBound("---偏应用函数输出---")
		
		logWithDateBound("INFO 4: xxx") 
		Thread.sleep(1000)
		
		logWithDateBound("INFO 5: xxx") 
		Thread.sleep(1000)
		
		logWithDateBound("INFO 6: xxx") 
		Thread.sleep(1000)		
	}	
	
	def log(date: java.util.Date, message: String) {
		println( date + "------" + message )
	}

}

输出:


C:\Users\Administrator\Desktop>scala Test.scala
Mon Sep 23 13:34:18 CST 2019---------普通函数输出---
Mon Sep 23 13:34:18 CST 2019------INFO 1: xxx
Mon Sep 23 13:34:18 CST 2019------INFO 2: xxx
Mon Sep 23 13:34:18 CST 2019------INFO 3: xxx
Mon Sep 23 13:34:18 CST 2019---------偏应用函数输出---
Mon Sep 23 13:34:18 CST 2019------INFO 4: xxx
Mon Sep 23 13:34:18 CST 2019------INFO 5: xxx
Mon Sep 23 13:34:18 CST 2019------INFO 6: xxx

2、函数柯里化

函数的柯里化 就是把原来接受2个参数的函数,变成接受1个参数的函数  的过程。

新的函数 返回一个以第2个参数 做为参数的函数。

比如,普通函数定义:def add(x: Int, y: Int) = x + y ,调用 add(1,2)  的结果为 3

而柯里化后的定义:def add(x:Int) (y: Int) => x + y ,调用 add(1)(2) 的结果也是3,过程是 第1次调用使用1个参数x,然后返回一个函数类型的值,第2次使用参数y 调用这个函数类型的值,最后返回结果。

这个柯里化的过程可以演变为:def add(x:Int) = (y: Int) => x + y ,也就是接收1个参数 x,返回一个匿名函数,这个匿名函数接收1个Int类型参数y,函数体为 x + y。

object Test {
	def main(args: Array[String]) {

		println( addInt(1)(2) )
	}
	
    def addInt(x:Int)(y: Int): Int = x + y

}

输出为 3 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值