scala方法和涵数的声明以及方法转换成涵数

scala方法和涵数的声明以及方法转换成涵数:

 

方法声明:

scala> def m1(x:Int, y:Int) : Int = x + y

m1: (x: Int, y: Int)Int

scala> m1(3,4)

res9: Int = 7

x + y为涵数体 

涵数声明:

scala> val f1 = (x: Int, y: Int) => x + y

f1: (Int, Int) => Int = <function2>

(Int, Int)参数类型

黄色是返回类型,后面的 <function2>表示两个参数的一个涵数,x + y为涵数体

 

scala> def m2(f:(Int,Int)=>Int) = f(3,4)

m2: (f: (Int, Int) => Int)Int 定入的一个方法m2并且方法的参数是一个涵数类型的参数,后面是方法的实现体

 

scala> val f1=(x:Int,y:Int) => x+y

f1: (Int, Int) => Int = <funtion2>定义一个有两个参数的涵数 f1,做为方法m2的参数传入方法体

 

scala> m2(f1) 方法里面传入涵数名调用(即scala可以将一个涵数当做参数进行传入)

res10: Int = 7

 

方法转换为一个涵数;

scala> def m1(x:Int,y:Int):Int=x+y         //定义一个两个参数为int类型且返回类型也是一个int的一个方法m1

m1: (x: Int, y: Int)Int

 

scala> val f1 = m1 _                        //将m1转换成涵数据并用 f1 接收  方法名+空格+下划线

f1: (Int, Int) => Int = <function2>

然后就可以调用 m2(f1)

scala> m2(f1)            传入转换过的涵数

res12: Int = 7

scala> m2(m1)           直接传入方法也没有报错是因为scala内部自动隐式转换成了涵数后当做m2方法的参数传入的,这有个隐式转换过程

res13: Int = 7

 

posted @ 2019-09-17 14:44  cindy_zl  阅读(233)  评论(0编辑  收藏  举报