`
cakin24
  • 浏览: 1331563 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Scala函数和匿名函数

阅读更多

一 函数是第一等公民

1、把函数作为实参传递给另外一个函数。
2、把函数作为返回值。
3、把函数赋值给变量。
4、把函数存储在数据结构里。
在Scala中,函数就像普通变量一样,同样也具有函数的类型。
 
二 函数类型
1、定义
在Scala语言中,函数类型的格式为A =>B,表示一个接受类型A的参数,并返回类型B的函数。
例子:Int => String 是把整型映射为字符串的函数类型
2、代码
  1. package test_first
  2. object DemoextendsApp{
  3. println( apply( layout,10))
  4. // 函数 f 和 值 v 作为参数,而函数 f 又调用了参数 v
  5. def apply(f:Int=>String, v:Int)= f(v)
  6. def layout(x:Int)="["+ x.toString()+"]"
  7. def operate(f:(Int,Int)=>Int)={f(4,4)}
  8. def add(x:Int,y:Int)=x+y
  9. println(operate(add))
  10. def greeting()=(name:String)=>{"hello"+" "+ name}
  11. val test = greeting()
  12. println(test("cakin24"))
  13. def multiplyBy(factor:Double)=(x:Double)=>factor*x
  14. val x=multiplyBy(10)
  15. println(x(50))
  16. }
3、运行结果
[10]
8
hello cakin24
500.0
 
三 高阶函数
1、定义
用函数作为形参或返回值的函数,称为高阶函数。
def operate(f:(Int,Int)=>Int)={f(4,4)}
def greeting() =(name:String) =>{"hello" + " " + name}
2、代码
  1. package test_first
  2. object DemoextendsApp{
  3. println( apply( layout,10))
  4. // 函数 f 和 值 v 作为参数,而函数 f 又调用了参数 v
  5. def apply(f:Int=>String, v:Int)= f(v)
  6. def layout(x:Int)="["+ x.toString()+"]"
  7. }
3、运行结果
[10]
 
四 匿名函数
就是函数常量,也称为函数文字量。
在Scala里,匿名函数的定义格式为
(形参列表) =>{函数体}
箭头左边是参数列表,右边是函数体。
使用匿名函数后,我们的代码变得更简洁了。
1、匿名函数为1个参数。
var inc = (x:Int) => x+1
以上实例的 inc 现在可作为一个函数,使用方式如下:
var x = inc(7)-1
2、匿名函数中定义多个参数:
var mul = (x: Int, y: Int) => x*y
mul 现在可作为一个函数,使用方式如下:
println(mul(3, 4))
3、不给匿名函数设置参数,如下所示:
var userDir = () => { System.getProperty("user.dir") }
userDir 现在可作为一个函数,使用方式如下:
println( userDir() )
 
五 匿名函数实例
  1. package test_first
  2. object DemoextendsApp{
  3. var factor =3
  4. val multiplier =(i:Int)=> i * factor
  5. println("multiplier(1) value = "+ multiplier(1))
  6. println("multiplier(2) value = "+ multiplier(2))
  7. }
 
六 匿名函数实例
multiplier(1) value = 3
multiplier(2) value = 6
分享到:
评论

相关推荐

    spark源码之scala基础语法demo

    scala是一种基于JVM的面向对象的函数编程,scala编程相对于...2:函数式编程,柯里化函数,匿名函数,高阶函数等。 3:代码行简单。 4:支持并发控制,Actor Model机制 5:目前比较流行的kafka,spark均由scala开发。

    scala学习手册.zip

    Scala也是一种函数式...Scala提供了轻量级的语法用以定义匿名函数,支持高阶函数,允许嵌套多层函数,并支持柯里化 。Scala的Case Class及其内置的模式匹配相当于函数式编程语言中常用的代数类型(Algebraic Type)。

    Scala程序设计(第2版)

    6.2.1 匿名函数、Lambda与闭包 152 6.2.2 内部与外部的纯粹性 154 6.3 递归 154 6.4 尾部调用和尾部调用优化 155 6.5 偏应用函数与偏函数 157 6.6 Curry化与函数的其他转换 158 6.7 函数式编程的...

    Functional Programming Patterns in Scala and Clojure

    所有迹象都显示,诞生50多年后,函数式编程却焕发了青春,越来越受到关注和青睐,从边缘地带步入了主流,除了Scala和Clojure这些新生函数式编程语言大行其道之外,Java等老牌面向对象的编程语言也开始支持匿名函数。...

    jscala:Scala宏,可从Scala代码生成JavaScript

    命名和匿名函数 Scala数组/ Seq作为JavaScript数组文字 Scala Map和匿名类作为JavaScript对象 如果,同时,for..in和for语句 Scala if作为表达式(例如val a = if(true)1 else 2) Scala匹配作为JavaScript开关 ...

    scala从入门到精通技术教学视频

    02.Scala程序和Java程序对比 03.Scala环境搭建 04.Scala解释器 05.案例_做最好的自己 第二章 变量和数据类型 00.导学 01.输出语句和分号 02.Scala中的常量 03.Scala中的变量 04.字符串的定义 05.惰性赋值 06.标识符 ...

    spark从入门到实战

    第1章:SCALA编程(一) 1.大数据分析框架概要、Spark课程学习计划及建议 2.为什么学习SCALA语言及SCALA语言...14.匿名函数定义与使用 15.高阶函数定义与使用 16.深入高阶函数的使用 。。。。。。。。。。。。。。

    快学 scala 中文版 带完整目录

    12.2 匿名函数 177 12.3 带函数参数的函数 178 12.4 参数(类型)推断 179 12.5 一些有用的高阶函数 180 12.6 闭包 181 12.7 SAM转换 182 12.8 柯里化 183 12.9 控制抽象 185 12.10 return表达式 186 练习 ...

    Scala 2:Scala 2编译器和标准库-开源

    Scala用一种简洁的高级语言将面向对象和函数式编程结合在一起。 Scala的静态类型有助于避免复杂应用程序中... 在Scala中,函数是值,可以使用简洁的语法将其定义为匿名函数。 在Scala中,案例类用于表示结构数据类型。

    Scala 2:Scala 2 编译器和标准库-开源

    Scala 在一种简洁的高级语言中结合了面向对象和函数式编程。 Scala 的静态类型有助于避免复杂应用程序中... 在 Scala 中,函数是值,可以定义为具有简洁语法的匿名函数。 在 Scala 中,case 类用于表示结构化数据类型。

    Scala 闭包

    如下面这段匿名的函数: val multiplier = (i:Int) => i * 10 函数体内有一个变量 i,它作为函数的一个参数。如下面的另一段代码: val multiplier = (i:Int) => i * factor 在 multiplier 中有两个变量:i 和 ...

    scalas-underscore:将Scala的_函数简短语法的魔力带入Javascript

    Scalas下划线表示匿名函数的语法关于该库从Scala的短语法(用于创建匿名函数JavaScript)中提取了一些语法上的糖。 这些函数通常用于映射列表和数组。 该库使用ES2015(ES6)中的实验功能Symbols and Proxies。 由于...

    lighty:ES5 的匿名函数组合器

    lighty:ES5 的匿名函数组合器基于 ES5 并受 Scala 的启发,lighty 旨在为在 JavaScript 中创建匿名函数提供舒适的语法。例子ex 1:拆分一个字符串,然后修剪每个字符串,然后过滤非空字符串。 在 vanilla ES5 中是...

    Scala、Groovy++、Stackless Python、Erlang 学习笔记及分享

    NULL 博文链接:https://xiajs.iteye.com/blog/1871551

    λ表达式之争:Scala vs Java8

    在JVM中没有匿名函数或Lambda表达式的概念。JVM知道是字节码。字节码是一个严格的OO规范。由语言的创造者和编译者通过这些限制来创建新的、高级的语言元素。  我们第一次遇到Lambda表达式是需要在Takipi中增加对...

    10函数的定义使用

    1.函数声明 函数一般是写在方法体内部的 val 函数名 = (参数列表) => {函数体} 2.方法和函数的区别 在scala中函数作为参数的形式传递到...匿名函数: //一般在方法中函数传递时使用。 val arr = Array(1,2,3,4,5)

    java异常笔试题-scage:用Scala编写的游戏引擎

    与参与者类似,这些任务是匿名函数,您可以在运行时在应用程序的任何范围内添加和删除它们。 它都是单线程的,所以你不必弄乱消息。 适用于任何类型的 2D opengl 基元的庞大绘图库。 从 ttf 文件加载和使用字体...

    Scala基础(9) 针对集合的操作

    list.foreach(elem => println(elem)) // 这是一个匿名函数 (elem:Int) => println(elem) 映射的遍历 for((k,v) Xiamen University, THU->Tsinghua University) // 循环遍历映射 for ((k, v) println(k + +v)

    jdk-8u181-windows-x64.zip

    jdk1.8新特性,例如:Lambda表达式(也称为闭包)是整个Java 8发行版中最受期待的在Java...在JVM平台上的很多语言(Groovy,Scala,……)从一开始就有Lambda,但是Java程序员不得不使用毫无新意的匿名类来代替lambda。

Global site tag (gtag.js) - Google Analytics