【Scala】

    科技2022-07-12  116

    Scala很多地方相较于Java来说都很简洁,但是正是如此,导致有的地方可能理解比较复杂。 _ 在Scala中用处比较多,下面就来简单介绍一下各种用法。

    _

    导包

    类似与Java的 *

    初始化数据

    scala中,类的属性要给初始值,不然会判断错误,在java中默认会赋予初始值

    var age : Int = _ // _下划线就是默认值,

    注意: 在使用 _ 赋默认值时,需要指明变量类型

    访问元组

    访问元组时,和值一起使用表示第几个元素

    //获取第一个元素 元组名._1 //获取第二个元素 元组名._2

    匹配数组

    Array(0,_*)匹配数组以0开始

    元素匹配

    List(1,2,3,4,5,6,7,8,9).filter(_ % 2 == 0)

    匹配每个元素,得出满足条件的列表

    替换参数

    替换函数的参数 函数参数只在函数中出现一次,可以使用下划线代替

    //val res = lines.flatMap((s: String) => s.split(" ")) val res = lines.flatMap(_.split(" "))

    模式匹配

    用于模式匹配中默认匹配项 如果所有case 都不匹配,则会执行case _ 分支,类似与Java 中的default 语句

    在case校验的时候, 变量没有被使用, 则可以用_替代

    def main(args: Array[String]): Unit = { val a:Any = 1.0 val result = a match { case x:String => s"${x}是String类型的数据" case x:Double => s"${x}是Double类型的数据" case x:Int => s"${x}是Int类型的数据" case _ => "未匹配" } // 在case校验的时候, 变量没有被使用, 则可以用_替代. val result2 = a match { case _:String => "String" case _:Double => "Double" case _:Int => "Int" case _ => "未匹配" } println(result) println(result2) }

    将函数赋给一个变量

    将函数直接赋值给一个变量,但是不执行该函数 _ 将方法转换为了一个函数

    def method1(x:Int,y:Int):Int = x+y val f2 = method1 _

    =>

    函数返回类型

    scala> def double(x: Int): Int = x*2 double: (x: Int)Int //定义一个函数变量: scala> var x : (Int) => Int = double x: Int => Int = <function1> //调用 scala> x(2) res1: Int = 4

    匿名函数

    //通过匿名函数定义一个函数变量xx scala> var xx = (x: Int) => x + 1 xx: Int => Int = <function1> //给一个高阶函数,传递一个函数: scala> val newList = List(1,2,3).map { (x: Int) => x * 2 } newList: List[Int] = List(2, 4, 6)

    模式匹配

    => 等价于 java swtich 的 :

    scala> val x = 10; val y = 20 x: Int = 10 y: Int = 20 scala> val max = x > y match { case true => x case false => y } max: Int = 20
    Processed: 0.010, SQL: 8