• Scala函数定义与使用


    Scala函数定义与使用

    定义函数最通用的方法是作为某个或者单例对象的成员,这种函数被称为方法

    基本定义语法:

    def 方法名 (参数列表) : 结果类型 = {方法体}
    
    • 1
    def max(x: Int, y: Int): Int = {
      if (x > y) x
      else y
    }
    
    • 1
    • 2
    • 3
    • 4

    函数概念:

    def counter(value: Int): Int = {value += 1}
    
    • 1

    函数类型:(Int) => Int

    函数的输入参数的类型以及返回值的类型一起构成函数类型。

    • 当参数只有一个时,圆括号可以省略
    • 只有存在多个参数时(不同参数之间用逗号隔开),圆括号才是必须的

    函数值:(value) => {value += 1}

    定义函数:

    val counter:Int => Int = {(value) => value += 1}
    
    • 1

    函数字面量

    匿名函数,Lambda表达式,不需要给每个函数命名。

    (num:Int) => num * 2
    
    • 1

    Lambda表达式格式:

    (参数)=>表达式
    //如果参数只有一个,参数的圆括号可以省略
    
    • 1
    • 2

    案例:

    scala> val myNumFunc:Int=>Int = (num:Int)=>num * 2
    myNumFunc: Int => Int = $Lambda$1041/1258503852@51a16adf
    
    scala> println(myNumFunc(3))
    6
    
    • 1
    • 2
    • 3
    • 4
    • 5

    匿名函数→赋值→函数类型的变量

    当Scala可以自动推断变量类型时,不用声明类型。

    scala> val myNumFunc = (num:Int)=>num * 2
    myNumFunc: Int => Int = $Lambda$1057/227972178@4d4df0f4
    
    scala> println(myNumFunc(3))
    6
    
    • 1
    • 2
    • 3
    • 4
    • 5

    若继续省略num的类型声明

    scala> val myNumFunc = (num)=>num * 2
    <console>:11: error: missing parameter type
           val myNumFunc = (num)=>num * 2
                            ^
    
    • 1
    • 2
    • 3
    • 4

    若给出类型说明

    scala> val myNumFunc:Int=>Int = (num)=>num * 2
    myNumFunc: Int => Int = $Lambda$1067/1482010861@92fd091
    
    scala> println(myNumFunc(3))
    6
    
    • 1
    • 2
    • 3
    • 4
    • 5

    下划线“_”的作用:
    表示每个参数在函数字面量里面仅出现一次。

    scala> val counter = (_:Int)+1//有类型时括号不能省略,等效于“x:Int=>x+1”
    counter: Int => Int = $Lambda$1068/519063059@2d3d4a54
    
    scala> val add = (_:Int)+(_:Int)//等效于“(a:Int,b:Int)=>a+b”
    add: (Int, Int) => Int = $Lambda$1070/1221878991@1e14b269
    
    scala> val m1=List(1,2,3)
    m1: List[Int] = List(1, 2, 3)
    
    scala> val m2=m1.map(_*2)//map接受一个函数作为参数,相当于“m1.map(x=>x*2)”,参数的类型可以根据m1的元素类型推断出,所以可以省略。
    m2: List[Int] = List(2, 4, 6)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相关阅读:
    从零开始的C++(十六)
    互联网被裁的程序员,未来有什么方向呢?
    javascript流程控制(2)
    vue3中hooks的介绍及用法
    C++初阶(十一)STL简介及string类初讲
    【C语言】结构体内存对齐
    手把手实操|深度剖析电商贷款风控相关细节(电商贷模型)
    【OpenCV 例程 300篇】245. 特征检测之 BRISK 算子
    Yakit工具篇:中间人攻击(平替Burp)的相关技巧-03
    Java必做实验4线程应用
  • 原文地址:https://blog.csdn.net/XQC_KKK/article/details/127609660