Scala方法和函数
来源:互联网 发布:mysql u p h端口 编辑:程序博客网 时间:2024/06/05 09:43
//方法的定义 def m1(x: Int, y: Int): Int = { //方法体 x * y } //函数的定义 val f1 = (x: Int, y: Int) => { x + y }
函数可以作为参数,传入方法:
package smu.gaoyi/** * Created by 31531 on 2017/6/3. */object HelloScala { def main(args: Array[String]): Unit = { //定义一个函数 val f1 = (x: Int) => { x + 1 } //将函数传入m1方法 val res = m1(f1) println(res) } //定义一个方法 def m1(f: Int => Int) : Int = { f(3) }}
PS:
在有的书上,统一的把函数和方法称为函数,而函数中有一种特殊的函数,叫值函数或者函数字面量。下面是值函数的定义:
/** * 值函数,又称为函数字面量或者Lambda函数 * 注意:值函数不能指定其返回值类型,编译器会进行类型推到来确定其返回值类型 */ val sum = (x: Int, y: Int) => { x + y }
值函数在编译后会被编译成一个类,所以值函数本质上更像一个对象。同样可以使用lazy关键字修饰,以指明其被创建的时机。
值函数的简化使用
val arrInt = Array(1, 2, 3, 4) //定义值函数 val increment = (x: Int) => x + 1 //值函数最常用的场景是作为高阶函数的输入 val arr1 = arrInt.map(increment) println(arr1.toBuffer) //由于arrInt中的元素类型为Int,因此传入map的函数的输入类型可以省略 val arr2 = arrInt.map((x) => x + 1) println(arr2.toBuffer) //值函数参数只有一个时,可以省略括号 val arr3 = arrInt.map(x => x + 1) println(arr3.toBuffer) //值函数的参数x在=>的右边只出现过一次,可以用“_”对函数进行优化 val arr4 = arrInt.map(_ + 1) println(arr4.toBuffer)
高阶函数
/** * 定义了一个高阶函数,输入参数是函数,返回值是编译器自动推断 * * @param f * @return */ def highFun(f: (Double) => Double) = { f(100) } def sqrt(x: Double): Double = { Math.sqrt(x) }
val res = highFun(sqrt) println(res)
/** * 定义一个高阶函数,其输入参数为Int类型,返回值类型为函数类型 * @param n * @return */ def highFunc1(n: Int): Double => Double = { //函数体 (x: Double) => x * n } /** * 省略返回值的高阶函数 * @param n */ def highFunc2(n: Int) = { (x: Double) => x * n }
阅读全文
0 0
- Scala方法和函数
- scala中的函数和方法
- Scala中的方法和函数
- Scala中的方法和函数
- Scala Functions vs Methods(scala中的函数和方法)
- Scala Functions vs Methods(scala中的函数和方法)
- [译]Scala方法和函数的区别
- Scala学习笔记-方法和函数
- scala方法和函数的区别
- Scala中方法和函数的区别
- scala 中方法和函数的区别
- Scala 学习(一)--- 方法和函数
- Scala中方法和函数的区别
- 快学Scala-方法和函数
- Scala方法和函数的区别
- scala函数与方法
- scala函数与方法
- scala中方法和函数有什么区别
- 微软大楼设计方案(简单)
- vue单一组件下动态修改数据时的全部重渲染
- Tomcat+Nginx集群与负载均衡
- 堆和栈的区别
- 0013_Roman to Integer
- Scala方法和函数
- 主动与被动、绽放与掩饰
- 【C#】初识
- 简单介绍 Kotlin for Android
- bootstrap01
- TensorFlow实战——CNN(LeNet5)——MNIST数字识别
- Pycharm2017激活码
- CSU 2131:突然的灵光 (三分法)
- Java实现-报数