Scala高阶函数介绍

jQuery 版本怎么选?别一上来就用最新版,老项目里这个坑很常见 jQuery 是一个封装好的 JavaScript 函数库,简称 JQ它的核心理念是jQuery 有 1.x、2.x、3.x 三个主要版本系列2.0 以上版本不再支持 IE6、IE7、IE8版本选择不能只看“新不新”,而要看项目兼容性和实际需求.min.js是压缩版文件,生产环境常用使用 jQuery 前必须先通过<script>正确引入基本就是没引入或引入失败可以快速绑定点击事件.animate()可以快速实现动画效果,但定位属性要设置好。 阅读详情

 

Scala混合了面向对象和函数式的特性。在函数式编程语言中,函数是"头等公民",可以像其他任何数据类型一样被传递和操作。在函数式编程语言中,只需要将具体实现包在函数中作为参数传入即可。

 

 

作为值的函数

 

在变量中存放函数

// 将num值设置为3.14
    val num = 3.14
    // 将fun设置为函数
    // 注意:ceil _ 函数后面的 _ 意味着确实指的是函数,而不是碰巧忘记传参
    val fun = ceil _ // _把ceil方法转为函数,在Scala中方法无法直接操作,必须转为函数操作

    println(num)
    println(fun(2.4))

    // 下面是将 fun 作为参数传给另一个函数
    Array(3.14,1.42,2.0).map(fun).foreach(println)

 

 

匿名函数

 

在Scala中,你不需要给每一个函数命名,以下是一个匿名函数

// 该函数将参数乘以3
val newX = (x: Double) => 3 * x
Array(3.14, 1.42, 2.0).map(newX).foreach(print)

 

 

带函数参数的函数

 

// 由于 valueAtOneQuarter 是一个接收函数参数的函数,因此被称为高阶函数。
  def valueAtOneQuarter(f: (Double) => Double) = f(0.4)

 

 

常用的高阶函数

 

要熟悉和适应高阶函数,我们可以看看Scala库中常用的

(1 to 9).map(0.1 * _)

// 打印一个三角形
(1 to 9).map("*" * _).foreach(println)

// filter方法输出所有匹配某个特定条件的元素,
(1 to 9).filter(_ % 2 == 0).foreach(println)

// reduceLeft方法接收一个二元的函数--即一个带有两个参数的函数,并将它应用到序列中的所有元素中,
(1 to 9).reduceLeft(_ * _) // ==> 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9
// 具体实现就是 (...((1 * 2) * 3) * 4 ) ... * 9)

// sortWith 排序,根据每个元素的长度递增
val content = "Mary has a little lamb"
content.split(" ").sortWith(_.length < _.length).foreach(println)

 

 

闭包

 

在Scala中,你可以在任何作用域内定义函数,包、类甚至是另一个函数或方法。在函数内,你可以访问到相应作用域内的任何变量。注意:函数可以在变量不在处于作用域内时被调用。

// 我们先定义一个函数
def mulBy(factor: Double) = (x: Double) => {
  factor * x
}

// 第一次调用mulBy函数将参数factor设置为3,该变量在(x: Double) => { factor * x } 函数的函数体,
// 函数被存入triple,然后参数变量factor从运行时的栈上被弹出
val triple = mulBy(3)
// mulBy再次被调用, 将factor设置为0.5, 函数被存入half, 这样的函数就是闭包。
val half = mulBy(0.5)

println(triple(14) + " "+ half(14)) // ==> 42.0 7.0

 

 

柯里化

 

柯里化指的是将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数作为参数的函数。

// 以下函数接受一个参数,生成另一个接受单个参数的函数,
// Scala中可以简写为 def mulOneAtATime(x:Int)(y:Int) = x * y
def mulOneAtATime(x: Int) = (y: Int) => x * y

// 可以通过以下调用来就按两个数的乘积
mulOneAtATime(4)(7)

 

​

Actor

 

/**
 * 创建HiActor1
 */
class HiActor1 extends Actor {

  def act() = {
    while (true) {
      receive {
        case "hi1" => {
          println("hello1")
        }
        case "F" => {
          println(".......")
        }
      }
    }
  }
}


/**
 * 创建HiActor2
 */
class HiActor2(hi1: Actor) extends Actor {

  def act() = {
    while (true) {
      receive {
        case "hi" => {
          println("hello2")
          hi1 ! "F"
        }
        case "other" => {
          println("other")
        }
      }
    }
  }
}


def main(args: Array[String]): Unit = {
  val hi1 = new HiActor1()
  val actor1 = hi1.start()
  val hi2 = new HiActor2(actor1)
  val actor2 = hi2.start()
  actor2 ! "hi"
}

 

 

 

长按识别图中二维码

关注获取更多资讯

改进爬山算法之六:随机重启爬山算法(Random-Restart Hill Climbing,RRHC) 随机重启爬山算法(Random-Restart Hill Climbing,RRHC)是爬山算法的一种改进策略,是一种启发式搜索算法,旨在通过随机重启来克服传统爬山算法容易陷入局部最优解的局限性,并增加找到全局最优解的概率。随机重启爬山算法通过在多次运行中不断尝试不同的初始解,并在每次运行中执行标准的爬山算法,最终选择所有运行中找到的最佳解作为最终结果。(1)计算复杂度:由于需要多次运行爬山算法,因此算法的计算复杂度可能较高,特别是在解空间较大或每次迭代需要较长时间的情况下。 阅读详情

相关推荐

史上最全的Logisim存储系统实验教程(基于华中科技大学计算机组成原理实验)内赋源码下载

本博客是最全的最好的解释的华中科技大学计算机组成实验存储系统实验,本博客给出了电路实现,也给出了使用电路的原因有利于新手学习十分详细。并且内赋源码下载。

qq_62325622的博客 2万+

Scala基础 -- 6.高阶函数

6 高阶函数   Scala混合了面向对象和函数式的特性,我们通常将可以作为参数传递到方法中的表达式叫做函数。在函数式编程语言中,函数是“头等公民”,高阶函数包含:作为值的函数、匿名函数、闭包、柯里化等等。 6.1 作为值的函数   可以像任何其他数据类型一样被传递和操作的函数,每当你想要给算法传入具体动作时这个特性就会变得非常有用。 val arr1 = Array(1,2,3,4,5) //定...

TheBigBlue的博客 287

告别龟速与断连:Arduino IDE下ESP32及ESP32-CAM一站式环境部署指南

本文提供Arduino IDE下ESP32及ESP32-CAM一站式环境部署指南,解决下载速度慢、断连等常见问题。通过国内镜像源加速、详细步骤讲解和ESP32-CAM专属配置技巧,帮助开发者快速完成环境搭建,避免常见陷阱,提升开发效率。

weixin_30576827的博客 771

scala的方法

方法 一个类可以有自己的方法,scala中的方法和Java方法类似。但scala与Java定义方法的语法是不一样的。 定义方法 语法 scala def methodName (参数名:参数类型, 参数名:参数类型) : [return type] = { // 方法体:一系列的代码 } 参数列表的参数类型不能省略 返回值类型可以省略,由scala编译器自动推断 返回值可以不写return,默认就...

汉子一枚 707

【信息学奥赛一本通】1215:迷宫(bfs版)

同时当Extense处在某个格点时,他只能移动到东南西北(或者说上下左右)四个方向之一的相邻格点上,Extense想要从点A走到点B,问在不走出迷宫的情况下能不能办到。每组测试数据的第1行是一个正整数n(1≤n≤100),表示迷宫的规模是n×n的。接下来是一个n×n的矩阵,矩阵中的元素为‘再接下来一行是4个整数ha,la,hb,lb,描述A处在第ha行, 第la列,B处在第hb行, 第lb列。一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n×n的格点组成,每个格点只有2种状态,.

chu_xiaojie的博客 944

基于树莓派4B设计的厨房环境监测系统_368

本项目设计并实现了一种基于树莓派4B的厨房环境监测系统,提升厨房使用过程中的安全性与智能化水平。系统采用树莓派4B作为主控核心,集成DHT11温湿度传感器、MQ2烟雾传感器、火焰传感器、光敏传感器、水滴检测传感器等多种传感器,实现对厨房环境温湿度、烟雾、火焰、光照与溢水等参数的实时监测,并通过蜂鸣器进行本地报警。系统通过WIFI连接互联网,利用MQTT协议将环境数据上传至华为云物联网平台,实现远程可视化监控。

415

第23讲: Scala高阶函数实战详解

高阶函数主要有两种:一、将一个函数当做另外一个函数的参数(即函数参数)普通函数的定义语法如下:deffunName(para1:Type1,para2:Type2):Type={dosomethings}我们想象一下,如果将函数作为参数,那么函数的类型该怎么写呢?函数的类型,其实就是输入输出的类型。假设,我们需要将函数ceil作为参数,而ceil的定义如下d...

weixin_33806300的博客 351

【C2000系列DSP的Bootloader详解】如何打包源文件为库文件且加密仅授权使用,一步步教你如何实现

如果想要在 TI 的 CCS 开发环境中为 C2000 系列 MCU 生成 lib 库文件,并对这些库文件进行加密保护,确保只有授权方(持有密钥)才能调用和使用,以此保护源代码的知识产权。

昔时扬尘处 177

scala的高阶函数(算子)

scala的高阶函数(算子) scala简介 1.Scala是一门多范式的静态类型编程语言,Scala支持【面向对象】和【函数式编程】 2.Scala源代码(.scala)会被编译成java字节码(.class),然后运行在JVM之上,并可以调用现有的Java类库,实现两种语言的无缝对接 Scala匿名函数 知识补充: 1.不需要写def 函数名 2.不需要写返回类型,使用类型推导 3.= 变成 => 4. 如果有多行则使用{}包括,否则建议省略 //普通的函数 def test1(v

m0_59737088的博客 799

【无人机项目实战】第三章:fast_planner工程解读(附C++代码)

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、规划系统运行逻辑【业务部分】1.Fast_planner_node.cpp【程序入口】功能代码实现2.kino_replan_fsm.cpp【状态机转移】功能代码实现KinoReplanFSM::init()函数订阅目标点回调函数订阅里程计回调函数检查路径规划是否成功【重要】执行状态机FSM定时器回调函数【重要】判断目标点是否有障碍物或者是轨迹执行过程中是否有障碍物的回调函数3

qq_35635374的博客 1万+

Modbus RTU/TCP协议栈手写实现:主从站设计、功能码、CRC、异常响应

本文从协议栈架构、帧结构、功能码、CRC校验、异常响应、主从站设计等多个维度,完整阐述了Modbus RTU/TCP协议栈的手写实现方案。帧间隔机制是RTU的核心,T3.5超时检测决定了帧边界识别CRC16查表法以512字节ROM换取8倍性能提升,适合嵌入式功能码路由表实现可扩展的代码架构,便于新增功能异常响应机制保障协议健壮性,每个错误都有明确反馈Modbus TCP在RTU基础上增加MBAP头,实现以太网扩展多核RTOS环境下的并发访问与线程安全RS-485总线的电气隔离与浪涌保护。

从事移动开发八年,csdn博客专家,阿里云特邀专家,华为云云享专家,高级网络信息安全工程师,大数据工程师(高级),python技术开发(高级),HarmonyOS 应用开发者高级认证,现在某学校任教。 1万+

Scala的高阶函数

reduce接受两个参数返回一个参数,例如对数组中的所有元素求和,通过调用reduce来实现(1,2,4,3).reduce((x,y)=>(x+y)通过把集合中的第一个元素赋值给x,第二个元素赋值给y,即x=1, y=2,并对这两个值求和。对不变序列的每个元素执行指定的二元规约操作。如果传递的函数的返回值为真,将保留元素中的值,如果为假则过滤元素。假设定义一个数组Arr(1,2,3),通过数组调用map,即Arr(1,2,3).map(x=>x+1),返回值会形成一个新的数组Array(2,3,4)。

2301_81748087的博客 1012

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Scala--高阶函数详细介绍

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lqding.blog.51cto.com/9123978/1741885 高阶函数主要有两种: 一、将一个函数当做另外一个函数的参数(即函数参数) 普通函数的定义语法如下: 1 def funName(pa

似水流年 2923

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

day07-scala的函数式编程及常用高阶函数介绍

day06,我们学习了scala类的继承、抽象类、trait、包及包对象。今天学习scala的函数式编程及常用高阶函数。

shenjinrui的博客 268

scala的高阶函数

【代码】scala的高阶函数。

2401_84163644的博客 247

Scala的高阶函数2

常见的高阶函数包括map,flatten,flatmap,foreach,reduce。概念:指使用其他函数作为参数或者返回一个函数作为结果的函数。需要一个额外的函数作为参数,所以它是一个高阶函数。对数组每一个元素都去执行一次函数。与map函数的区别:它没有返回值。

2401_87076481的博客 664

Scala的高阶函数中的map函数和foreach函数

(三)foreach 函数。(一)什么是高阶函数。

2401_85414079的博客 264

Scala高阶函数foreach

作用:对数组的每一个元素都执行一次函数,没有返回值。高阶函数foreach。

2301_81373895的博客 293

Scalad的高阶函数的定义

Scala的常见高阶函数有:map、flatten、flatmap、foreach、reduc、filter和fold。高阶函数:是一个特殊的函数,特殊之处在于:它指使其他函数作为参数或者一个函数作为结果的函数。

2401_87129116的博客 427

10.10Scala的高阶函数

高阶函数:是一个特殊的函数,特殊之处在于:它指使用其他函数作为参数或者返回值。

2402_87076449的博客 572

Scala 高阶函数

在函数式编程中,高阶函数(Higher-Order Function)是核心概念之一,它们可以接受其他函数作为参数,或者返回函数作为结果358。从左侧元素开始,进行reduce操作,即先对元素1和元素2进行处理,然后将结果与元素3处理,依次类推,即为reduce;例如,map方法可以接收一个函数作为参数,然后对集合中的每个元素应用这个函数1235678。在Scala中,控制抽象是通过高阶函数来实现的,例如return表达式可以从函数中返回值,而不管函数的返回类型是什么。在Scala中实现高阶函数。

2401_87076421的博客 322

Scala课堂笔记5

高阶函数包括(map函数、foreach函数、filter函数、flatten函数等)2、foreach函数。4、flatten函数。3、filter函数。

2401_87076500的博客 355
上一篇: Scala中特质介绍
下一篇: Docker入门教程(一)
geek-wmy
博客等级 码龄9年 322粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值