函数参数
1.可变参数(多个参数时,可变参数一般放置在最后)
def demo(name : String, girlFriend : String*) : Int = 1
2.参数默认值,一般有默认值的参数放在后面
def demo(name : String, girlFriendSize : Int = 5) : Int = 1
3.带名参数
def demo(name : String,age : Int) : Int = 1
demo(name = "cbd" , age = 18)
至简原则
1.return省略,函数体最后一行作为返回值
2.函数体只有一行代码,可以省略花括号
3.返回值类型如果能够推断出来,[:返回值]可以省略
def gnmyd = {
"给nm一刀"
}
4.如果有return,则不能省略返回值类型
def gnmyd = {
//编译异常
return "给nm一刀"
}
5.如果函数明确声明Unit返回值,那即使函数使用return关键字也不起作用
6.Scala如果期望是无返回值类型,可以省略等号和[:返回值]
7.如果函数无参,但是声明了参数列表,那么调用时,小括号,可加可不加
8.如果函数没有参数列表,那么小括号可以省略,调用时小括号必须省略
9.如果不关心名称,只关心逻辑处理,那么函数名( def)可以省略
def ex1(funcName:Int => Unit): Unit ={
ex2(1)
}
def ex2(id:Int):Unit = {
println("上去就是一刀")
}
高阶函数
1.函数可作为值传递
val ls:(Int, Int) => Int = abab
val la = abab _
2.函数可以作为参数进行传递
def 小野六花(xylh : (Int,Int) => Int): Unit ={
}
注:定义一个函数,函数参数是一个函数签名
3.函数可以作为函数返回值返回
def 小野六花() ={
def 三上悠亚():Unit = {
println("深田永美")
}
}
小野六花()()
匿名函数
没有名字的函数就是匿名函数,形如(x:Int)=>{//do}
匿名函数至简原则
1)参数类型可以省略,会根据形参自动推导
2)类型省略后,如果只有一个参数,小括号可以省略
3)匿名函数只有一行,大括号也可以省略
4)如果参数只出现一次,则参数省略且后面参数可以用_代替
def a(l:(Int,String)=>String): Unit ={
println(l(1,"a"))
}
def b(l:Int=>Unit):Unit = {
l(1)
}
this.a((_,_)=>{"aaa"})
this.b(_=>println("bbb"))
函数柯里化(Haskell Curry)&闭包&惰性加载
1.闭包是函数式编程的标配
2.scala递归必须声明函数返回值类型
3.函数返回值被声明为lazy时,函数的执行将被推迟,知道我们首次对此取值,该函数才会执行
4.lazy不能修饰var
网友评论