scala深入学习之函数学习(代码片段)

<一蓑烟雨任平生> <一蓑烟雨任平生>     2023-01-04     579

关键词:

目录

一、函数的定义

代码示例:

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语言基本语法学习36

一:scala简介官网:https://www.scala-lang.org/Scala语言很强大,集成了面向对象和函数式编程的特点。运行在JVM(jdk)。大数据中为什么学习scala?spark是scala语言编写。python写spark挺好的java写spark很糟糕(代码实在是太多了)scala写spark很... 查看详情

scala学习之scala集合类(代码片段)

文章目录SCALACOLLECTIONSThemainScalacollectionsclassesTHEARRAYBUFFERCLASSMorewaystoworkwith`ArrayBuffer`THELISTCLASSCreatingListsAddingelementstoaListHowtorememberthemethodnamesHowtoloopoverlistsA 查看详情

scala学习之scala快速入门(代码片段)

文章目录Scala的“味道”Overview概述Hello,worldTheScalaREPLTwotypesofvariablesDeclaringvariabletypesControlstructuresif/elsematchexpressionstry/catchforloopsandexpressionswhileanddo/whileClassesScalamethodsTraits 查看详情

scala学习之scala中的类(代码片段)

文章目录SCALACLASSESBasicclassconstructor`val`makesfieldsread-onlyClassconstructorsOtherScalaclassexamplesAUXILIARYCLASSCONSTRUCTORSNotesSUPPLYINGDEFAULTVALUESFORCONSTRUCTORPARAMETERSBenefitsBonus 查看详情

scala学习之traits和抽象类(代码片段)

文章目录SCALATRAITSANDABSTRACTCLASSESUsingScalaTraitsasInterfacesAsimpleexampleExtendingatraitExtendingmultipletraitsUSINGSCALATRAITSLIKEABSTRACTCLASSESAfirstexampleOverridinganimplementedmethodMixinginmu 查看详情

scala学习之tuples和oop示例(代码片段)

文章目录AFEWMISCELLANEOUSITEMSTUPLESAfewmoretupledetailsReturningatuplefromamethodTuplesaren’tcollectionsANOOPEXAMPLEAfewclassesAddingbehaviortoPizzaAddingbehaviortoOrderTestingthoseclassesExperimentwitht 查看详情

scala基础语法之trait详解(代码片段)

...ala系列学习笔记:Scala概述与开发环境配置Scala基础学习之运算符Scala基础学习之for循环和while循环一文掌握scala中的方法和函数Scala基础:类和对象、访问修饰符和构造器Scala的继承和抽象类本章节目标能够使用trait独立完... 查看详情

spark学习之scala编程

 一、Scala语言基础1、Scala语言简介Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序。学习Scala编程语言,为后续学习Spark... 查看详情

scala的继承和抽象类(代码片段)

...ala系列学习笔记:Scala概述与开发环境配置Scala基础学习之运算符Scala基础学习之for循环和while循环一文掌握scala中的方法和函数Scala基础:类和对象、访问修饰符和构造器本章节目标掌握继承和抽象类相关知识点掌握匿名... 查看详情

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

一、main函数的分析首先来看我们在上一节最后看到的这个程序,我们先来简单的分析一下。有助于后面的学习objectHelloScala{defmain(args:Array[String]):Unit={println("ILoveYouScala");}}如图所看到的,在Scala中能够使用object和class分别定义一个... 查看详情

kubernetes深入学习之二:编译和部署镜像(api-server)(代码片段)

欢迎访问我的GitHub本篇概览本文是《Kubernetes深入学习》系列的第二篇,上一章我们下载了Kubernetes1.13源码,然后修改kubectl源码再构建运行进行验证,在整个源码包中,除了kubectl这样的可执行程序,还有api-server、controller-manager这... 查看详情

flink学习之flinksql(代码片段)

🌰昨天我们学习完TableAPI后,今天我们继续学SQL,TableAPI和SQL可以处理SQL语言编写的查询语句,但是这些查询需要嵌入用Java、Scala和python编写的程序中。hadoop专题:hadoop系列文章.spark专题:spark系列文章.flink专题:Flink... 查看详情

flink学习之flinksql(代码片段)

🌰昨天我们学习完TableAPI后,今天我们继续学SQL,TableAPI和SQL可以处理SQL语言编写的查询语句,但是这些查询需要嵌入用Java、Scala和python编写的程序中。hadoop专题:hadoop系列文章.spark专题:spark系列文章.flink专题:Flink... 查看详情

gui学习之二十二——qrubberband学习总结(代码片段)

今天学习一种全新的输入控件——QRubberBand()控件(橡皮筋选中)一.描述QRubberBand()提供了一个矩形或西安来只是选择或边界的效果(就像在桌面上点击鼠标后拖拽拉出来的框一样),一般和鼠标事件一同协作。该控件是继... 查看详情

scala学习之「trait」(代码片段)

trait调用链Scala中支持让类继承多个trait后,依次调用多个trait中的同一个方法,只要让多个trait的同一个方法中,在最后都执行super.方法即可类中调用多个trait中都有的这个方法时,首先会从最右边的trait的方法开始执行,然后依... 查看详情

机器学习之支持向量机(手推公式版)(代码片段)

文章目录前言1.间隔与支持向量2.函数方程描述3.参数求解3.1拉格朗日乘数3.2拉格朗日对偶函数前言  支持向量机(Support(Support(SupportVectorVectorVectorMachine,SVM)Machine,SVM)Machine,SVM)源于统计学习理论,是一种二分类模型,是机... 查看详情

spark学习之作业优化(代码片段)

...。对往期内容感兴趣的同学可以参考👇:链接:spark学习之处理数据倾斜.链接:spark学习之sparksql语法优化.链接:spark学习之资源调度.链接:spark学 查看详情

vue学习之路7-v-on指令学习之简单事件绑定(代码片段)

前言在JavaScript中任何一个DOM元素都有其自身存在的事件对象,事件对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置和鼠标按钮的状态等。事件通常与函数结合使用,函数不会在事件发生前被执... 查看详情