zoukankan      html  css  js  c++  java
  • 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.效果

      

      

  • 相关阅读:
    缓存问题
    基情探测器心得
    新手最常见的误解和错误
    C语言书籍推荐
    初学者编程实战指南 (4) 由一个简单的例子学习抽象
    数据结构的动画演示
    利用IDE使你的代码风格好看一些
    初学者编程实战指南 (2) 避免逻辑的重复
    入门编程语言的选择问题
    关于ACM集训队
  • 原文地址:https://www.cnblogs.com/juncaoit/p/6256909.html
Copyright © 2011-2022 走看看