一:函数式编程
1.介绍
2.函数值复制给变量
3.案例
在前面的博客中,可以看到这个案例,关于函数的讲解的位置,缺省。
4.简单的匿名函数
1 package gh 2 3 object Anonymous { 4 def main(args: Array[String]): Unit = { 5 var ui=(name:String)=>println("name:"+name) 6 ui("tom") 7 } 8 }
5.效果
二:高级函数的参数问题
1.介绍
函数作为一个参数进行传递
2.将函数做为参数传递给另一个函数
ui是函数。
1 package gh 2 3 object Param1 { 4 def greet(func:(String)=>Unit,name:String){ 5 func(name) 6 } 7 def main(args: Array[String]): Unit = { 8 var ui=(name:String)=>println("hi,"+name) 9 greet(ui,"hh") 10 } 11 }
换一种方式:
1 package gh 2 3 object Param1 { 4 def greet(func:(String)=>Unit,name:String){ 5 func(name) 6 } 7 def main(args: Array[String]): Unit = { 8 greet((name:String)=>println("hi,"+name),"hh") 9 } 10 }
3.效果
4.函数作为输出值
1 package gh 2 3 object Param2 { 4 def greet(msg:String)=(name:String)=>println(msg+","+name) 5 6 def main(args: Array[String]): Unit = { 7 //这个hi是一个函数 8 val hi=greet("hello") 9 hi("you") 10 } 11 12 }
5.效果
三:类型推断
1.类型推断
就两种意思:
如果在函数中定义了参数的类型,就不要写类型
如果只有一个参数,可以省略括号
8.程序示例
1 package gh 2 3 object Param2 { 4 def greet(func:String=>Unit,name:String): Unit ={ 5 func(name) 6 } 7 8 def main(args: Array[String]): Unit = { 9 //省略类型 10 greet((name)=>println("hello "+name),"lao") 11 //省略括号 12 greet(name=>println("hello "+name),"lao") 13 } 14 15 }
9.效果
四:常用的高阶函数
1.foreach
1 package gh 2 3 object Foreach { 4 def main(args: Array[String]): Unit = { 5 (1 to 9).map("x" * _).foreach(println(_)) 6 } 7 }
2.效果
3.filter
1 package gh 2 3 object Filter { 4 def main(args: Array[String]): Unit = { 5 (1 to 3).map(_*2).filter(_%2==0).foreach(println(_)) 6 } 7 }
4.效果
5.常用的高阶函数(阶乘)
1 package gh 2 3 object Filter { 4 def main(args: Array[String]): Unit = { 5 println((2 to 4).reduceLeft(_*_)) 6 println(2*3*4) 7 } 8 }
6.效果
五:隐式转换
1.介绍
2.程序示例(隐式转换函数)
1 package gh 2 class Special(val name:String) 3 class Student(val name:String) 4 class Older(val name:String) 5 object BuyTicket { 6 implicit def object2Special(obj:Object):Special={ 7 if(obj.getClass==classOf[Older]){ 8 val older=obj.asInstanceOf[Older] 9 val name=older.name 10 new Special(name) 11 }else{ 12 new Special("none") 13 } 14 } 15 var ticket=9 16 def buyTicket(p:Special): Unit ={ 17 ticket=ticket-1 18 println("ticket="+ticket) 19 } 20 def main(args: Array[String]): Unit = { 21 buyTicket(new Older("zhangsan")) 22 } 23 }
3.效果
4.隐式参数
4.程序示例(隐式参数)
1 package gh 2 class Sign{ 3 def writer(content:String)=println(content) 4 } 5 6 object ExamTest { 7 implicit val sign=new Sign 8 def main(args: Array[String]): Unit = { 9 exam("tom") 10 } 11 def exam(name:String)(implicit sign:Sign): Unit={ 12 sign.writer(name+" start") 13 } 14 }
5.效果