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 函数闭包和柯里化的更多相关文章

  1. Java函数式编程:二、高阶函数,闭包,函数组合以及柯里化

    承接上文:Java函数式编程:一.函数式接口,lambda表达式和方法引用 这次来聊聊函数式编程中其他的几个比较重要的概念和技术,从而使得我们能更深刻的掌握Java中的函数式编程. 本篇博客主要聊聊以 ...

  2. JavaScript 闭包&基于闭包实现柯里化和bind

    闭包: 1 函数内声明了一个函数,并且将这个函数内部的函数返回到全局 2 将这个返回到全局的函数内中的函数存储到全局变量中 3 内部的函数调用了外部函数中的局部变量 闭包简述: 有权访问另一个函数局部 ...

  3. Scala基础:闭包、柯里化、隐式转换和隐式参数

    闭包,和js中的闭包一样,返回值依赖于声明在函数外部的一个或多个变量,那么这个函数就是闭包函数. val i: Int = 20 //函数func的方法体中使用了在func外部定义的变量 那func就 ...

  4. 浅析 JavaScript 中的 函数 uncurrying 反柯里化

    柯里化 柯里化又称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果. 因此柯里化的过程是 ...

  5. 学好Spark/Kafka必须要掌握的Scala技术点(三)高阶函数、方法、柯里化、隐式转换

    5. 高阶函数 Scala中的高阶函数包含:作为值的函数.匿名函数.闭包.柯里化等,可以把函数作为参数传递给方法或函数. 5.1 作为值的函数 定义函数时格式: val 变量名 = (输入参数类型和个 ...

  6. swift 学习(二)基础知识 (函数,闭包,ARC,柯里化,反射)

    函数 func x(a:Int, b:Int)  {}   func x(a:Int, b:Int) -> Void {}  func x(a:Int, b:Int) ->(Int,Int ...

  7. JS的闭包、高阶函数、柯里化

    本文原链接:https://cloud.tencent.com/developer/article/1326958 https://cloud.tencent.com/developer/articl ...

  8. Scala中的柯里化

    一.初识Currying柯里化   柯里化(Currying)技术 Christopher Strachey 以逻辑学家 Haskell Curry 命名的(尽管它是 Moses Schnfinkel ...

  9. JS 函数的柯里化与反柯里化

    ===================================== 函数的柯里化与反柯里化 ===================================== [这是一篇比较久之前的总 ...

  10. 柯里化函数之Javascript

    柯里化函数之Javascript 定义 依据定义来说,柯里化就是将一个接收"多个"參数的函数拆分成一个或者很多个接收"单一"參数的函数.定义看起来是比較抽象的. ...

随机推荐

  1. mysql存储过程实战

    今天科比离去,今天肺炎病毒持续肆虐... 意识到生命的脆弱,今天我继续前行,比以往更加坚定和紧迫,这辈子不活好自己就算白来一趟. 最近需要用到mysql存储过程去处理一些表数据,然后利用java po ...

  2. 记一次 .NET某列控连锁系统 崩溃分析

    一:背景 1. 讲故事 过年喝了不少酒,脑子不灵光了,停了将近一个月没写博客,今天就当新年开工写一篇吧. 去年年初有位朋友找到我,说他们的系统会偶发性崩溃,在网上也发了不少帖子求助,没找到自己满意的答 ...

  3. Windows系统下的输入法选择

    总共用过5款输入法:搜狗拼音输入法,QQ拼音输入法,谷歌拼音输入法,手心输入法,小狼毫. 搜狗输入法功能最强大,词库也很全,基本上对于盲打的输入纠错很准确,但是因为后台会启动多个服务,会占很多内存资源 ...

  4. MySQL Boolean类型的坑

    MySQL中,Boolean只是 tinyint(1) 的别名,也就是说,MySQL中并没有真正的bool类型. 而SQLAlchemy生成SQL的时候并没有检测到 这一点,这就导致一个问题,当使用 ...

  5. SpringBoot事务注解@Transactional 事物回滚、手动回滚事物

    处理springboot 下提交事务异常,数据库没有回滚的问题. spring的文档中说道,spring声明式事务管理默认对非检查型异常和运行时异常进行事务回滚,而对检查型异常则不进行回滚操作. 什么 ...

  6. macOS搭建SonarQube

    目录 前言 准备环境 下载安装包 解压路径:/usr/local 创建数据库 修改配置文件 配置环境变量 启动SonarQube 扫描项目 项目报告介绍 总结 前言 初到新公司,接手8-10个java ...

  7. Java package(包) +import 关键字(2)

    1 package com.bytezero.exer; 2 3 import java.lang.reflect.Field; 4 5 //import java.util.ArrayList; 6 ...

  8. Android APP 渗透测试---总结

    1.apk反编译得到源代码 使用编译软件 dex2gar 和 jdgui.jar 对Android APP软件进行反编译.具体步骤如下: (1)首先将APK文件后缀改为zip并解压,得到其中的clas ...

  9. 线上RocktMQ重复投递半事务消息故障排查

    1. 故障现象 2020-11-18 10:40开始,业务线反馈线上收到大量的重复MQ半事务消息,导致容器资源消耗急剧攀升,经查看MQ日志,发现broker-b的Master服务,报出大量半事务消息回 ...

  10. Nginx-web系列

    nginx 系列 目录 nginx 系列 一 简述 1.1 为什么要使用? 1.2 主要用于哪里? 二. Nginx 搭建环境 2.1 版本选择 2.2 环境准备 2.2 yum 直装 2.3 ngi ...