六 scala函数与方法
程序员文章站
2022-06-14 18:56:35
...
1.定义方法
- 带参不带返回值
scala> def main(args: Array[String]) :Unit = {println(args.length)}
main: (args: Array[String])Unit
scala> main(Array("a","b"))
2
scala>
使用Unit其实也有返回值,只不过返回值为空:Unit的实例:()
- 带参带返回值
方法的返回值类型可以不写,编译器可以推断出来,但是对于递归函数,必须指定返回类型
scala> def add(x: Int) : Int = x + 1
add: (x: Int)Int
scala> add(1)
2
scala>
- 无参无返回值
scala> def sayHello() :Unit = {println("hello")}
sayHello: ()Unit
scala> sayHello()
hello
scala>
2.定义函数
- 函数的定义,在scala中,函数也是一个对象,可以用一个变量来引用
scala> var fun = (x: Int) => x * 10
fun: Int => Int = <function1>
function1:表示fun这个变量的类型是function,而且是一个参数的函数
- 函数的调用
scala> fun(3)
res: Int = 30
- 匿名函数
scala> (x: Int, y: Int) => x + y
res29: (Int, Int) => Int = <function2>
scala> res29(2,6)
res30: Int = 8
- scala的函数与方法的区别
- 函数包含
=>
,方法的定义使用:def
- 函数是可以作为参数传入方法里面的的,而方法是不可以作为参数的
- eg:arr数组调用map方法,传入(x: Int) => x10匿名函数将数组中的每个元素执行10操作
scala> val arr = Array(1,2,3,4,5)
arr: Array[Int] = Array(1,2,3,4,5)
scala> arr.map((x: Int) => x*10)
res31: Array[Int] = Array(10,20,30,40,50)
scala> arr.map(x => x*10)
res32: Array[Int] = Array(10,20,30,40,50)
scala> arr.map(_*10)
res33: Array[Int] = Array(10,20,30,40,50)
- 函数的变体
scala> var f: Int => Int = {x => x * x}
f: Int => Int = <funtion1>
解析: 定义一个函数f,接受一个int类型的参数,返回值为int。 函数的实现为{x => x*x}
3.将方法转换成函数
定义一个函数myFun,参数为一个方法(f: Int => Int)Unit
,传入方法f0.
scala> def myFun(f: Int => Int){
printfln(f(100))
}
myFun: (f: Int => Int)Unit
scala> val f0 = (x: Int) => x*x
f0: Int => Int = <function1>
scala> myFun(f0)
10000
在定义一个方法f1.不能把一个方法当做参数传入另外一个方法,只能把一个方法的方法名当做参数,传入到另外一个方法中,如果在一个方法中传入方法名,会将方法名转换成一个函数
scala> def f1(x: Int) = x*x
f1: (x:Int)Int
scala> f1(4)
res34: Int = 16
scala> myFun(f1(4))
<console>:11: error: type mismatch;
found :Int
required :Int => Int
scala> myFun(f1)
10000
scala> f1 _
res35: Int => Int = <function1>
scala> myFun(f1 _)
10000
scala> myFun(x => f1(x))
10000
上一篇: 【scala】方法与函数
下一篇: scala方法与函数