Scala基础篇-函数

2015-12-25  本文已影响874人  helloworld1214

1.普通函数,scala函数不明显使用return返回值,如果有返回值,最后一行就是返回值

1.1定义返回值为Int的函数

def fun(x:Int,y:Int) : Int = {

    x+y//返回x+y的结果

}

等价函数:

def fun(x:Int,y:Int) = {//不写返回值类型scala会自动匹配最后一行的输出结果类型作为返回值类型

    x+y//返回x+y的结果

}


1.2无返回值函数

//如果没有返回值可以省略冒号、返回值类型、等号;定义没有返回值的函数(返回值为Unit)

def fun(x:String,y:String){

    println(x + "-" + y)

}

相当于 

def fun(x:Int,y:Int) : Unit={

    println(x + "-" + y)

}


1.3定义带有初始值参数的函数

def fun(x:Int=10) = {

    x + 5

}

注意:调用有参数的函数必须在函数名后加()

调用带有初始值参数的函数,传入的参数会覆盖参数初始值

2.值函数

说明:函数体赋给一个变量,调用的时候直接使用变量的名称

val valueFunction = (x:Int)=>x+1

调用:valueFunction(20)

相当于如下函数的定义:

def valueFunction(x:Int) : Int = x+1

多个语句的值函数

dec valueMultiFunction(x:Int) {

    var b = x+2

    println("b" + b)

}

3.匿名函数

val str1 = Array(1,2,3,4).map((x:Int)=>x+1).mkString(",")

//参数类型推倒

val str2 = Array(1,2,3,4).map((x)=>x+1).mkString(",")

//函数只有一个参数的话,可以省略()

val str3 = Array(1,2,3,4).map(x=>x+1).mkString(",")

////如果参数右边只出现一次,则可以进一步简化

val str4 = Array(1,2,3,4).map(_+1).mkString(",")

4.高阶函数

4.1函数参数

= 左边定义函数的参数 ,规定传入的“函数”参数类型,= 右边调用传入的“函数”并给一个参数值,这个参数值的类型就是定义的传入“函数”参数的“参数”类型如f:(Int)为Int型(太绕嘴了)

定义:def paramFunction(f:(Int)=>String)=f(10)

说明:f:(Int)=>String定义传入的“函数”参数,这个函数的输入参数为Int型,返回值为String类型

调用:paramFunction((x:Int)=>"Hello " + x)

4.2调用函数产生一个新的函数(函数返回值为函数)

定义:def productNewFunction(y:Int)=(x:Int)=>x * y

说明:(大白话表达)相当于一个函数里定义了一个匿名函数,把最外层函数的参数赋给函数体内的匿名函数,匿名函数有自己的参数,当调用外层函数的时候返回一个中间函数,当再次调用中间函数的时候才会返回数据结果。

演示:

5.函数闭包

定义:

var freeParam=10

def closeFun(x:Int)=x + freeParam

说明:

x:绑定变量,x的类型在定义函数的时候就已经定义好了,x的值在函数调用的时候确定

freeParam:自由变量,在定义函数之前类型不固定,freeParam值可以不断的变化,freeParam值影响到整个函数的结果。注意:freeParam变量必须在闭包函数定义之前定义,否则报错

调用:

关于闭包(大白话):freeParam变量的类型和值在运行的时候确定,而且freeParam的值可以不断的变化并且影响整个函数的结果,这种由自由式变为封闭式的过程就是闭包

上一篇下一篇

猜你喜欢

热点阅读