欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

六 scala函数与方法

程序员文章站 2022-06-14 18:56:35
...

1.定义方法

  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的实例:()

  1. 带参带返回值
    方法的返回值类型可以不写,编译器可以推断出来,但是对于递归函数,必须指定返回类型
scala> def add(x: Int) : Int = x + 1
add: (x: Int)Int
scala> add(1)
2
scala>
  1. 无参无返回值
scala> def sayHello() :Unit = {println("hello")}
sayHello: ()Unit
scala> sayHello()
hello
scala>

2.定义函数

  1. 函数的定义,在scala中,函数也是一个对象,可以用一个变量来引用
scala> var fun = (x: Int) => x * 10
fun: Int => Int = <function1>

function1:表示fun这个变量的类型是function,而且是一个参数的函数

  1. 函数的调用
scala> fun(3)
res: Int = 30
  1. 匿名函数
scala> (x: Int, y: Int) => x + y
res29: (Int, Int) => Int = <function2>
scala> res29(2,6)
res30: Int = 8
  1. 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