第五章
1、方法定义
1.1标准定义
def add5(x:Int,y:Int):Int={
x+y
}
1.2简化定义
def add1(x:Int,y:Int):Int = x+y
def add2(x:Int,y:Int) =x+y
def add3(x:Int,y:Int): Int = {
if(y==100) return 100
x+y
}
def printHello1 = println("hello")
def printHello2: Unit ={
println("123")
}
1.3方法的参数
def add(x:Int,y:Int):Int = {
x+y
}
add(y = 10, x = 100)
def add1(x:Int=100,y:Int=20)={
x+y
}
def add2(x:Int,y:Int=20)={
x+y
}
def add3(x:Int,y:Int,z:Double*)={
x+y+z.sum
}
println(add3(1, 2, 34, 55.1,22.7))
1.4传参定义的方法
def getPath (pathPrefix:String,n:Int)={
val currentDate = LocalDate.now()
for(i <- 1 to n) yield {
val DateTime =currentDate.plusDays(-i)
val timeString = DateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))
s"${pathPrefix}/${timeString}"
}
}
2、函数
2.1函数定义(函数是对象,同一个作用域内不能出现同名变量)
val add2 = new Function2[Int,Int,Int] {
override
def apply(v1: Int, v2: Int) = v1+v2
}
add2.apply(1,2)
val func = add2
func.apply(1,2)
val add = (x:Int,y:Int) => {
x+y
}
2.2函数与方法的关系
2.2.1重载( 方法存储在方法区中,函数是对象保存在堆中)
object $05_function_method_relationship {
def main(args: Array[String]): Unit = {
def m1 (a: Int) = a+1
}
def m1 (a: Int) = a+1
def m1 (a: Int,b:Int) = a+1
}
2.2.2方法转换为函数(在方法内部才能实现)
def main(args: Array[String]): Unit = {
val m2_to_func = m2 _
println(m1_to_func(1,9))
}
def m2 (a: Int,b:Int) = a+b
3、高阶函数:以函数作为参数/返回值的方法或者函数,称之为高阶函数
3.1高阶函数的本体
def add( x:Int ,y:Int , func: (Int,Int)=>Int ) = {
func(x,y)
}
def sayHello(msg:String, func: (String)=>Unit ) = {
func(msg)
}
3.2高阶函数的用法
def add( x:Int ,y:Int , func: (Int,Int)=>Int ) = {
func(x,y)
}
val func = (x:Int,y:Int) => x+y
println(add(10, 20, func))
println(add(10, 20, (x:Int,y:Int) => x+y ))
println(add(10, 20, (x,y) => x+y ))
3.3高阶函数String相关(字符串获取变量值用这个,s"
a
/
/
/
{a}///
a///{b}")
val func2 = (x:String) => println(s"say:${x}")
say("123123",func2)
val func3 = (a:String,b:Int) => s"${a}///${b}"
println(say2("我是str", 1, func3))
def say(a:String,func:(String)=>Unit)= {func(a)}
def say2(a:String,b:Int,func:(String,Int)=>String) = {func(a,b)}
3.4匿名函数
def main(args: Array[String]): Unit = {
println(add2(10,20,(x:Int,y:Int)=>x*y))
def add2(a:Int,b:Int,func2:(Int,Int)=>Int) = {func2(a,b)}
}
4、柯里化(有多个参数列表的方法)
def sum(x:Int,y:Int)(z:Int)(a:Int):Int = x+y+z+a
println(sum2(10, 20)(30)(40))
5、闭包函数
def main(args: Array[String]): Unit = {
val y = 10
val func = (x:Int) => {
x + y
}
}
6、方法递归
def main(args: Array[String]): Unit = {
def m1(a:Long):Long={
if (a==1){
1
}else{
a * m1(a-1)
}
}
println(m1(5))
}