Scala深入学习之函数学习

简介: 笔记

一、函数的定义


代码示例:

package functionDemo
/**
 * @author : 蔡政洁
 * @email :caizhengjie888@icloud.com
 * @date : 2020/8/23
 * @time : 2:14 下午
 */
object FunctionDemo1 {
  // 实现加法的功能
  val f1 = ((a:Int,b:Int) =>{a+b})
  val f2 = (a:Int,b:Int) =>{a+b}
  val f3 = (_:Int)+(_:Int)
  val f4:(Int,Int)=>Int = (_+_)
  val f5:((Int,Int)=>Int)=((x,y)=>x+y)
  val f6 = new Function2[Int,Int,Int] {
    override def apply(v1:  Int, v2:  Int): Int = v1+v2
  }
  def main(args: Array[String]): Unit = {
    // 函数调用
    val res = f1(10,20)
    println(res)
    val res2 = f6(100,100)
    println(res2)
  }
}

运行结果:

30
200


二、匿名函数


代码示例:

package functionDemo
/**
 * @author : 蔡政洁
 * @email :caizhengjie888@icloud.com
 * @date : 2020/8/23
 * @time : 6:08 下午
 */
object FunctionDemo2 {
  // 定义一个匿名函数
  (x:Int)=>x+10
  val f1 = (x:Int)=>x+10
  val f2 = (x:Int,y:Int)=>x*y
  def main(args: Array[String]): Unit = {
    // 调用匿名函数
    println(f1(30))
    println(f2(10,10))
  }
}

运行结果:

40
100


三、递归函数


代码示例:

package functionDemo
/**
 * @author : 蔡政洁
 * @email :caizhengjie888@icloud.com
 * @date : 2020/8/23
 * @time : 7:06 下午
 */
object FunctionDemo3 {
  // 定义一个递归函数
  // 实现一个数学上阶乘的功能:3!=1*2*2 4!=4*3!
  // 递归函数的返回值类型要指定
  val factorial:Int=>Int=(n)=>{
    if (n<1)
      1
    else
      n * factorial(n-1)
  }
  def main(args: Array[String]): Unit = {
    println(factorial(10))
  }
}

运行结果:

3628800



四、无参函数


代码示例:

package functionDemo
/**
 * @author : 蔡政洁
 * @email :caizhengjie888@icloud.com
 * @date : 2020/8/23
 * @time : 7:13 下午
 */
object FunctionDemo4 {
  // 定义一个无参函数,参数括号不能省略
  val getAnswer = () => "success"
  def main(args: Array[String]): Unit = {
    // 无参函数的调用
    println(getAnswer())
    println(getAnswer)
  }
}

运行结果:

success
functionDemo.FunctionDemo4$$$Lambda$1/1349393271@3f0ee7cb



五、方法和函数的区别联系


1.方法和函数的定义语法不同


def 方法名(参数列表):返回类型=方法体

val 变量 = (函数参数列表)=> 函数体

2.方法一般定义在某个类,特质,或者object中

3.方法可以共享使用所在类的属性


将方法转换为函数

将方法作为参数传给另一个方法或者函数的时候,方法被转化为函数

使用神奇的下划线_

代码示例:

package functionDemo
/**
 * @author : 蔡政洁
 * @email :caizhengjie888@icloud.com
 * @date : 2020/8/23
 * @time : 7:45 下午
 */
object FunctionDemo5 {
  def method1(x:Int,y:Int) = x+y
  def main(args: Array[String]): Unit = {
    val res1 = method1(10,10)
    // 方法转化为函数 _
    val res2 = method1 _
    println(res1)
    println(res2(20,10))
    // 方法作为参数传给另一个方法或者函数,系统会自动把方法转化为函数
  }
}

运行结果:

20
30



相关文章
|
6月前
|
分布式计算 Scala Spark
Scala【集合常用方法和函数操作(下)】
Scala【集合常用方法和函数操作(下)】
|
6月前
|
分布式计算 Scala Spark
Scala 【集合常用方法和函数操作-上】
Scala 【集合常用方法和函数操作-上】
|
1月前
|
分布式计算 大数据 Java
大数据-87 Spark 集群 案例学习 Spark Scala 案例 手写计算圆周率、计算共同好友
大数据-87 Spark 集群 案例学习 Spark Scala 案例 手写计算圆周率、计算共同好友
50 5
|
1月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
50 3
|
6月前
|
编译器 Scala
认识scala中的函数
认识scala中的函数
61 5
|
6月前
|
Scala 容器
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
108 2
|
6月前
|
消息中间件 分布式计算 大数据
Scala学习--day03--函数式编程
Scala学习--day03--函数式编程
102 2
|
6月前
|
Java Scala
Scala学习--day02---控制流、“九层妖塔—杨辉三角”
Scala学习--day02---控制流、“九层妖塔—杨辉三角”
194 1
|
6月前
|
Java 编译器 API
Scala学习--day01变量与数据类型、运算符
Scala学习--day01变量与数据类型、运算符
|
6月前
|
Scala
Scala函数和方法
Scala函数和方法
38 1