Scala学习笔记05--控制抽象

控制抽象

1.      本章作用:减少重复的代码。

2.      高阶函数:将一个函数作为其他函数的参数传递。为了减少重复代码。

2.1      书上的代码示例太墨迹,自己写个例子。

第一步,先看两个函数:

def sum(a: Int,b: Int, c: Int) = a + b + c; //将三个整数相加

  def dec(a: Int, b:Int, c: Int) = a - b - c;    //将三个整数相减

 

第二步,再创建一个函数,接收上面两个函数作为他的参数:

deffunManager(fun: (Int, Int, Int) => Int) = {

fun(1,2,3);

  }

注:funManager接收一个函数类型的参数,定义参数fun,这个参数的类型就是sum和dec类型。

funManager函数体内,会调用传递进来的函数。

 

第三步,测试:

同样,也可以把dec作为参数传递到funManager函数中。

注:funManager时,不能够直接传递sum函数的名字,而是要把函数传递进去。即:sum _ 或者 sum(_, _, _)。为什么是这么写,可以参考第八章的偏应用函数

2.2      这种写法,在集合里有很多,如exists方法。

2.3    个人感受:可以发现,这种传递参数的做法,类似于java里传递接口,然后调用接口里定义的方法。只要把对函数的调用定义到一个单独的类中,就很像策略模式。

简单实现一下:

第一步,定义一个类:

classHandleValue(a: Int, b: Int, c: Int) {

 

  //这不就是策略模式的变相实现么!!!

  def calculate(fun: (Int, Int, Int) => Int)= {

    fun(a, b, c);

  }

 

第二步,定义一个调用的Object:

objectSumTest2 {

  def main(args: Array[String]) {

 

  //提供加、减两个函数

  def sum(a: Int, b: Int, c: Int) = a + b + c;

  def dec(a: Int, b: Int, c: Int) = a - b - c;

 

  val v = new HandleValue(1,2,3);

  println(v.calculate(sum _));

 

  }

}

 

第三步:运行后OK。

 

3.      Curry化:传统的函数名后,只带一个括号“()”,curry表示不止一个“()”。

def plainOldSum(x: Int, y: Int) = x+ y;     //一个“()”

def curriedSum(x: Int)(y: Int) = x+ y;       //两个“()”

:具体用途,暂时不懂。很重要的一个性能!

4.

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值