Scala 函数闭包和柯里化
1 package com.atguigu.function
2
3 object HighFunction {
4 def main(args: Array[String]): Unit = {
5 /* val fun = (x: Int, y: String, z: Char) => {
6 if (x==0 && y=="" && z=='0'){
7 true
8 }else{
9 false
10 }
11 }
12 println(fun(0,"",'1'))*/
13
14 /*
15 练习 2: 定义一个函数 func,它接收一个 Int 类型的参数,返回一个函数(记作 f1)。
16 它返回的函数 f1,接收一个 String 类型的参数,同样返回一个函数(记作 f2)。函数 f2 接
17 收一个 Char 类型的参数,返回一个 Boolean 的值。
18 要求调用函数 func(0) (“”) (‘0’)得到返回值为 false,其它情况均返回 true。
19 */
20 def func(x: Int) = {
21 def f1(y: String) = {
22 println("我是f1!")
23
24 def f2(z: Char): Boolean = {
25 println("我是f2!")
26 if (x == 0 && y == "" && z == '0') false else true
27 }
28 f2 _
29 }
30
31 f1 _
32 }
33
34 // func(1)("")('1')
35 }
36
37 println("```````````````````````````")
38
39 def f1() = {
40 var a: Int = 10
41
42 def f2(b: Int) = {
43 a + b
44 }
45
46 f2 _
47 }
48
49 // 在调用时,f1 函数执行完毕后,局部变量 a 应该随着栈空间释放掉
50 val f = f1()
51 // 但是在此处,变量 a 其实并没有释放,而是包含在了 f2 函数的内部,形成了闭合的效果
52 println(f(3))
53 println(f1()(3))
54
55 //闭包
56 /*
57 addByFour函数:
58 内部定义一个局部变量a 固定值是4
59 函数的返回值是一个嵌套函数,完成a+b的操作,当外部调用时,addByFour()(2)只需要控制第二个形参的数值
60 而第一个加数永远是4,相当于固定了一个参数
61 */
62 def addByFour(): Int => Int = {
63 val a = 4
64
65 def addB(b: Int): Int = {
66 a + b
67 }
68
69 addB
70 }
71 println("结果是:" + addByFour()(3)) //4+3
72 }
函数柯里化,其实就是将复杂的参数逻辑变得简单化,函数柯里化一定存在闭包
1 //函数柯里化:把一个参数列表的多个参数,变成多个参数列表 也就是fun(a,b,c) -> fun(a)(b)(c) 分层函数调用
2 def addCurry(a : Int)(b:Int):Int ={
3 a+b
4 }
5 println("柯里化:"+addCurry(34)(23))
Scala 函数闭包和柯里化的更多相关文章
- Java函数式编程:二、高阶函数,闭包,函数组合以及柯里化
承接上文:Java函数式编程:一.函数式接口,lambda表达式和方法引用 这次来聊聊函数式编程中其他的几个比较重要的概念和技术,从而使得我们能更深刻的掌握Java中的函数式编程. 本篇博客主要聊聊以 ...
- JavaScript 闭包&基于闭包实现柯里化和bind
闭包: 1 函数内声明了一个函数,并且将这个函数内部的函数返回到全局 2 将这个返回到全局的函数内中的函数存储到全局变量中 3 内部的函数调用了外部函数中的局部变量 闭包简述: 有权访问另一个函数局部 ...
- Scala基础:闭包、柯里化、隐式转换和隐式参数
闭包,和js中的闭包一样,返回值依赖于声明在函数外部的一个或多个变量,那么这个函数就是闭包函数. val i: Int = 20 //函数func的方法体中使用了在func外部定义的变量 那func就 ...
- 浅析 JavaScript 中的 函数 uncurrying 反柯里化
柯里化 柯里化又称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果. 因此柯里化的过程是 ...
- 学好Spark/Kafka必须要掌握的Scala技术点(三)高阶函数、方法、柯里化、隐式转换
5. 高阶函数 Scala中的高阶函数包含:作为值的函数.匿名函数.闭包.柯里化等,可以把函数作为参数传递给方法或函数. 5.1 作为值的函数 定义函数时格式: val 变量名 = (输入参数类型和个 ...
- swift 学习(二)基础知识 (函数,闭包,ARC,柯里化,反射)
函数 func x(a:Int, b:Int) {} func x(a:Int, b:Int) -> Void {} func x(a:Int, b:Int) ->(Int,Int ...
- JS的闭包、高阶函数、柯里化
本文原链接:https://cloud.tencent.com/developer/article/1326958 https://cloud.tencent.com/developer/articl ...
- Scala中的柯里化
一.初识Currying柯里化 柯里化(Currying)技术 Christopher Strachey 以逻辑学家 Haskell Curry 命名的(尽管它是 Moses Schnfinkel ...
- JS 函数的柯里化与反柯里化
===================================== 函数的柯里化与反柯里化 ===================================== [这是一篇比较久之前的总 ...
- 柯里化函数之Javascript
柯里化函数之Javascript 定义 依据定义来说,柯里化就是将一个接收"多个"參数的函数拆分成一个或者很多个接收"单一"參数的函数.定义看起来是比較抽象的. ...
随机推荐
- 如何设置mysql root密码
如何设置mysql root密码: 1.首次安装 root初始密码为空,注意就是没有密码,直接敲回车即可进入 D:\wamp\bin\mysql\mysql5.6.17\bin> mysql - ...
- node版本管理工具nvm的安装及使用
一.什么是nvm nvm是一个node版本管理工具. 由于不同项目依赖的node版本可能不同,所以在维护多个项目时通常需要使用不同的node版本,这时候用nvm来切换不同的node版本就很方便. 官方 ...
- 项目实战:Qt + 树莓派3B+ 智能笔筒系统
红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术.树莓派.三维.OpenCV.OpenGL.ffmpeg.OSG.单片机.软硬结合等等)持续更新中-(点击传送门) 需求 1.基于树莓 ...
- 符合ISO26262标准的建模规范检查模型静态分析静态测试工具
Model Examiner - 功能安全解决方案(以下简称MXAM)测试套件是您进行全面静态模型分析的首选工具.MXAM提供了一种简单的方法来检查建模规范.分析模型结构和评估模型指标,所有这些功能都 ...
- MindSponge分子动力学模拟——使用MDAnalysis工具进行后分析(2024.02)
技术背景 分子动力学模拟(Molecule Dynamics Simulation,MD),本质上是一门采样技术.通过配置力场参数.拓扑结构和积分器,对一个给定的体系不断的采样,最终得到一系列的轨迹. ...
- 【Azure 应用服务】登录App Service 高级工具 Kudu站点的 Basic Auth 方式
问题描述 从Azure App Service的页面中,直接跳转到高级管理工具Kudu站点(https://<your app service name>.scm.chinacloudsi ...
- mysql视图详细笔记
1 #视图 2 /* 3 含义:虚拟表,和普通表一样使用 4 mysql5.1版本出现的新特性,是通过表动态生成的数据 5 6 比如:舞蹈班和普通班级的对比 7 创建语法的关键字 是否实际占用物理空间 ...
- Rtsp转Flv在浏览器中播放
目录 概述 环境 项目目录清单 项目搭建步骤 引入相关npm依赖 实例化一个express应用 创建WebsocketServer并解析rtsp 使用flv播放 浏览器中测试 代码 引用 概述 众所周 ...
- 微型MPU6050模块及串口/BLE透传的实物展示
前言 随着时间的积累,项目的沉淀.把很多做过的产品标准化掉,形成可以立即拿出来使用的产品.是非常重要的一个环节.最近,把基于MPU6050的模块微型化并使用串口透传这个产品梳理了一下.形成了标准化 ...
- max30100心率血氧健康传感器调试总结备忘
前记 在健康监测领域,心率血氧传感器是一个非常重要的前端采集设备.了解,研究并使用它,是一个方案商的基本素质.鉴于此,笔者花了一些时间在不同的硬件平台来使用它.中间遇到了一些问题值得总结和反思一下. ...