Scala深入学习之函数学习

Posted <一蓑烟雨任平生>

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上内容仅供参考学习,如有侵权请联系我删除!
如果这篇文章对您有帮助,左下角的大拇指就是对博主最大的鼓励。
您的鼓励就是博主最大的动力!

以上是关于Scala深入学习之函数学习的主要内容,如果未能解决你的问题,请参考以下文章

大数据学习之Scala语言基本语法学习36

理解Scala的函数式编程思想

Scala学习之相同的函数名

Spark学习之scala编程

Scala 模式匹配详解

大数据学习之Scala中main函数的分析以及基本规则