一直以来都对scala中“=>”的使用比较迷茫,也不知道他表示什么意思。今天就它的使用场景列举如下,希望可以共同探讨。

  1. 表示函数的返回类型(Function Type)

     scala> def double(x: Int): Int = x*2
    double: (x: Int)Int
    //定义一个函数变量:
    scala> var x : (Int) => Int = double
    x: Int => Int = <function1>
    //调用
    scala> x(2)
    res1: Int = 4

函数double的类型就是 (x: Int) => Int 或者 Int => Int。左边是参数类型,右边是方法返回值类型。

备注: 当函数只有一个参数的时候,函数类型里面括起来函数参数的括号是可以省略的。

  1. 匿名函数

     //通过匿名函数定义一个函数变量xx
    scala> var xx = (x: Int) => x + 1
    xx: Int => Int = <function1>
    //给一个高阶函数,传递一个函数:
    scala> val newList = List(1,2,3).map { (x: Int) => x * 2 }
    newList: List[Int] = List(2, 4, 6)

匿名函数定义, 左边是参数 右边是函数实现体 (x: Int)=>{}

  1. case语句

    scala> val x = 10; val y = 20
    x: Int = 10
    y: Int = 20 scala> val max = x > y match {
    case true => x
    case false => y
    }
    max: Int = 20

在模式匹配 match 和 try-catch 都用 “=>” 表示输出的结果或返回的值

  1. By-Name Parameters(传名参数),传名参数在函数调用前表达式不会被求值,而是会被包裹成一个匿名函数作为函数参数传递下去,例如参数类型为无参函数的参数就是传名参数。

     scala> def doubles(x: => Int) = {
    println("Now doubling " + x)
    x*2
    }
    doubles: (x: => Int)Int
    //调用函数
    scala> doubles(3)
    Now doubling 3
    res2: Int = 6 scala> def f(x: Int): Int = {
    println(s"Calling f($x)")
    x
    }
    f: (x: Int)Int
    //调用函数
    scala> doubles(f(3))
    Calling f(3)
    Now doubling 3
    Calling f(3)
    res9: Int = 6

对于函数doubles而言,它的参数x就是by-name的。如果调用doubles的时候,直接给个普通的值或者非函数变量。那么doubles的执行结果就跟普通的函数没有区别。但是当把一个返回值为Int类型的函数,例如f(2),传递给doubles的时候。那么f(2)会被先计算出返回值2,返回值2传入doubles参与运算。运算完成以后,f(2)会被doubles在执行以后,再调用一遍。

scala中“=>”的4种使用场景的更多相关文章

  1. jmeter中的几种参数化场景

    1.request路径中引用参数 2.body中引用参数 3.parameter中引用参数 4.header中引用参数,如token这类跟用户相关参数 5.response assertion中引用参 ...

  2. Programming In Scala笔记-第十七章、Scala中的集合类型

    本章主要介绍Scala中的集合类型,主要包括:Array, ListBuffer, Arraybuffer, Set, Map和Tuple. 一.序列 序列类型的对象中包含多个按顺序排列好的元素,可以 ...

  3. Scala 中Array,List,Tuple的差别

    尽管学了一段时间的Scala了,可是总认为基础不是太扎实,还有非常多的基础知识比較模糊.于是近期又打算又一次学习基础. Scala中的三种集合类型包含:Array,List,Tuple.那么究竟这三种 ...

  4. Scala学习2 ———— 三种方式完成HelloWorld程序

    三种方式完成HelloWorld程序 分别采用在REPL,命令行(scala脚本)和Eclipse下运行hello world. 一.Scala REPL. 按照第一篇在windows下安装好scal ...

  5. scala中Either的一种使用场景

    用scala有一年多了,对于scala中的Option和Try使用的较为频繁,对其应用场景相对熟悉一些.而对于Either,仔细回想一下却发现几乎(完全)没有使用过,其实并不是没有遇到过Either的 ...

  6. java高并发系列 - 第17天:JUC中的循环栅栏CyclicBarrier常见的6种使用场景及代码示例

    这是java高并发系列第17篇. 本文主要内容: 介绍CyclicBarrier 6个示例介绍CyclicBarrier的使用 对比CyclicBarrier和CountDownLatch Cycli ...

  7. Scala中apply的用法

    Scala中的 apply 方法有着不同的含义, 对于函数来说该方法意味着调用function本身, 以下说明摘自Programming in Scala, 3rd Edition Every fun ...

  8. Scala 深入浅出实战经典 第51讲:Scala中链式调用风格的实现代码实战及其在Spark中应用

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  9. Scala 中方法扩展实践

    前言 这个名字不知道取得是否合适,简单来说要干的事情就是给某个类型添加一些扩展方法,此场景在各种语言中都会用到,比如 C# 语言,如果我们使用一个别人写好的类库,而又想给某个类库添加一些自己封装的方法 ...

随机推荐

  1. react-native-echarts

    react-native-echarts是react native结合百度echart的图表,集成的一个图表插件. github地址:https://github.com/zhangxinagjunH ...

  2. Java初学者 编译能通过,但显示有错误,并且不会自动弹出方法的解决方法。

    因为使用了 @Data注解,关于注解的作用尚未深入理解,此处先做一个记录. 解决方法是,添加lombok插件

  3. 云计算之概念——IaaS、SaaS、PaaS、Daas

    云计算通俗来说就是输入/输出和计算不在一个主机上.计算要用到计算设备,计算设备一般是指CPU.内存和硬盘,输入/输出设备一般是指键盘.鼠标.显示器.耳机.音响.话筒等外设.而我们的个人计算机是使用主板 ...

  4. 【转】修复关于apache-xampp的问题:Port 443 in use by “vmware-hostd.exe”!

    在电脑里装了VMware后,再要装xampp,十有八九就会出现这个问题: 11:23:37  [Apache]     Problem detected! 11:23:37  [Apache]    ...

  5. js中公有方法、特权方法、静态方法

    1.公有属性和公有方法 1 2 3 4 5 6 7 8 9 function User(name,age){   this.name = name;//公有属性   this.age = age; } ...

  6. SharpZipLib压缩解压

    一.介绍 SharpZipLib是一个完全由C#编写的ZIP,GZIP,Tar和BZIP2 Library,可以方便的支持这几种格式的压缩和解压缩. https://github.com/icshar ...

  7. mysql 修改已存在的表增加ID属性为auto_increment自动增长

    今天有需要将已经存在表设置自动增长属性 具体如下 alter table customers change id id int not null auto_increment primary key; ...

  8. D3——动态绑定数据

    一.绑定数组元素 , , , , ]; d3.select("body") .selectAll("p") .data(dataset) .enter() .a ...

  9. 理解Underscore中的uniq函数

    uniq函数,是Underscore中的一个数组去重函数,给它传递一个数组,它将会返回该数组的去重副本. 1 ES6版本去重 在ES6版本中,引入了一个新的数据结构——set,这是一种类似数组的数据结 ...

  10. Django中Settings中Templates的路径设置

    ## mysite/mysite/settings.py## mysite是项目名 TEMPLATES = [ { 'BACKEND': 'django.template.backends.djang ...