scala 高级十五 scala 高介函数式编程

1.高阶函数主要有两种:一种是将一个函数当做另外一个函数的参数(即函数参数);另外一种是返回值是函数的函数。

2.值函数,我们可以用 var或者val 定义一个参数去接收一个函数叫做值函数 ,格式为 var fun_name=funName _

上图我们定了一个 add函数有两个参数,返回一个int 类型, 然后用吧定义好的add 函数传值给 fun_add   var fun_add=add _  然后用fun_add(2,7) 去调用函数

3.函数的嵌套

 //嵌套函数的使用在函数体再定义一个函数
  def nest(x:Int,y:Int,z:Int):Int=
  {

     def add(a:Int,b:Int):Int=
     {
       a+b;
     }
     //调用上面的函数再加上z
     add(x,y)+z;
  }

println(nest(1,6,5))

result:
12

3.高阶函数

package smart.iot

import scala.collection.mutable.ArrayBuffer

class TestFuncion {

}

object TestFuncion
{
  def main(args: Array[String]): Unit = {

    var arr=Array("a","b","c","d")

   var data= ArrToUpper(arr,func1)

     for(x<-data)
     {
       println(x);
     }

  }

  //嵌套函数的使用在函数体再定义一个函数
  def nest(x:Int,y:Int,z:Int):Int=
  {

     def add(a:Int,b:Int):Int=
     {
       a+b;
     }
     //调用上面的函数再加上z
     add(x,y)+z;
  }

  //定义一个函数把字母小写转大写
  def func1(str:String):String=
  {
    str.toUpperCase()
  }

  //高阶杉树,接收一个数组 和一个函数的定义 在使用的时候实际上传的是要调用的函数的名字
  def ArrToUpper(arr:Array[String],func:(String)=>String)=
  {
    for(x<-0 until arr.length)
    {
      arr(x)=func(arr(x))
    }
    arr
  }

}

4.匿名函数 (参数:参数类型)=>{表达式}

时间: 2024-10-13 11:54:32

scala 高级十五 scala 高介函数式编程的相关文章

scala 高级十八 scala隐式方法,隐式参数的实现和使用

摘要: 通过隐式转换,程序员可以在编写Scala程序时故意漏掉一些信息,让编译器去尝试在编译期间自动推导出这些信息来,这种特性可以极大的减少代码量,忽略那些冗长,过于细节的代码. 使用方式: 1.将方法或变量标记为implicit 2.将方法的参数列表标记为implicit 3.将类标记为implicit 隐式方法: package smart.iot import java.io.File import scala.io.Source class concealFunc(f:File) { d

scala 高级十六 scala 集合和集合的高级特性 map flatten fllatmap zip reduce zip 等操作

1. scala 的列表List 和集Set 的操作 //Set 和list 差不多,不过 Set 中不允许有重复的元素   var set=scala.collection.mutable.Set[Int]();        //+ 会产生一个新的对象,而不是在set 中动态增加    set.+(1)    //+= 会在原先的set 中动态的增加元素而不是产生一个新的对象.    set.+=(1,2,3)        //这个会输出一个排序以后的 集合 比如 输入 7,4,8,6,1

QT开发(六十五)——QT样式表编程实例

QT开发(六十五)--QT样式表编程实例 一.QComboBox组合框样式定制 1.基本定义 QComboBox  {     border: 1px solid gray;     border-radius: 3px;     padding: 1px 2px 1px 2px;  # 针对于组合框中的文本内容     min-width: 9em;   # 组合框的最小宽度 } QComboBox::drop-down {     subcontrol-origin: padding;   

Scala入门系列(九):函数式编程

引言 Scala是一门既面向对象,又面向过程的语言,Scala的函数式编程,就是Scala面向过程最好的佐证.也真是因此让Scala具备了Java所不具备的更强大的功能和特性. 而之所以Scala一直没有替代Java,一是因为Java诞生早,基于Java开发了大量知名的工程,并且最重要的是Java现在不只是一门编程语言,而是一个庞大的技术生态圈,所以未来十年内Scala也不会完全替代Java,但是Scala会在自己特有的领域大发光彩.   将函数赋值给变量 Scala中函数是一等公民,可以独立定

Scala学习笔记(1) -- 为什么要学函数式编程

很久之前我就学过Lisp和Erlang,但是也就是写写HelloWorld,写个排序算法.也在Coursera上听过Scala的课,可是那时候我还不怎么用Java,所以后来也没怎么继续.可是对函数式编程的兴趣一直不减,工作中几乎不会用Scala,但是用的是Java,我一直在想着怎么把Scala用到工作中.最近在写一个工具,因为这个工具基本只有我们项目组用,而且很简单,所以我就用Scala写了.以后有机会,把Scala用在生产上. 为什么对函数式编程这么感兴趣呢. 第一个原因,可以装逼,或者说是个

Scala 第十八讲 高阶函数 从大数据菜鸟走上大师的历程

来自原大数据王家林视频视频 23讲 var triple = (x : Double) => 3 * x //> triple  : Double => Double =     Array(3.14, 1.42, 2.0).map((x : Double) => 3 * x)                                                   //> res0: Array[Double] = Array(9.42, 4.26, 6.0)  

【linux高级程序设计】(第十五章)UDP网络编程应用 2

UDP广播通信 单播:一对一,TCP和UDP均可完成 广播:只能UDP完成.广播时发送方只发送一个数据包,但是网络上的交换机默认转发广播数据包到所有端口.路由器默认不转发任何广播数据包.故广播在局域网范围内. 组播:只有UDP可以完成.发送消息到同一个组播组的主机.视频电话.视频会议多采用. 广播IP地址:主机号全1.网络号正常 广播MAC地址:全1,即FF:FF:FF:FF:FF:FF 广播数据帧格式 处理过程: 网卡驱动程序对比自己的MAC地址与目的MAC地址,发现是广播MAC地址,统一接收

scala 基础十二 scala apply的使用,工厂方法和单例模式的实现

1. apply 可以用来实现类似于静态的初始化类的实例,请看下面实例 package smart.iot class applyclass { } class A { def apply()=println("hello class A"); } object B { def apply()=println("hello object B"); } object applyRun { def main(args: Array[String]): Unit = {

【linux高级程序设计】(第十五章)UDP网络编程应用 4

socket信号驱动 为了使一个套接字能够使用信号驱动I/O,至少需要以下3步操作. 1.安装SIGIO信号 2.套接字的拥有者设定为当前进程.因为SIGIO信号只会送到socket拥有者进程. 通过fcntl的F_SETOWN 3.套接字必须被允许使用异步I/O. 通过fcntl的F_SETFL,设置为O_ASYNC 在UDP通信中,下面情况会产生SIGIO信号 在TCP通信中,下面情况会产生SIGIO信号 例子: 下面的代码好奇怪,说是UDP的,但是发送接收用的是send, recv 而且客