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