Scala的函数,高阶函数,隐式转换

一:函数式编程

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.效果

  

  

原文地址:https://www.cnblogs.com/juncaoit/p/6256909.html