Scala 神奇的下划线 _

引言

在 Scala 中,下划线 _ 有很多种用法,作为 Scala 初学者也经常被下划线 _ 搞得晕头转向,下面是对 Scala 中下划线 _ 使用的简单总结~

导包时, 下划线 _ 表示引用多个方法,和 java 中的 * 类似

import scala.collection.mutable._

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

val/var 元组名 = (元素1, 元素2, 元素3....)
//获取第一个元素
元组名._1
//获取第二个元素
元组名._2

_* 表示获取集合一个一个的元素

//:_* 得到集合中的所有元素
val sum = add(1 to 10 :_*)
println(sum)

如果函数参数在函数体中只使用了一次,可以使用下划线 _ 替换

val a = List(1,4,2,7,3,5)
val b = (x:Int,y:Int) => if (x<y)true else false
println(a.sortWith(b))

val c = a.sortWith((x:Int,y:Int) => if (x<y)true else false)
println(c)
println(a.sortWith(_ < _))

使用下划线 _ 来简化函数定义

val a = List(1,2,3,4,5)
//a.foreach(x=>println(x))
a.foreach(println(_))

val a = List(1,2,3,4,5)
//println(a.map(x=>x+1))
println(a.map(_ + 1))

下划线 _ 用于元素匹配,表示集合的每个元素

//元素匹配
List(1,2,3,4,5,6,7,8,9).filter(_ % 2 == 0)

方法隐式转函数: 方法名 _

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

类成员变量初始化时,下划线 _ 作为占位符

var gender:String = _

下划线 _ 用于模式匹配中默认匹配项

str match {
   case "hadoop" => println("大数据分布式存储和计算框架")
   case "zookeeper" => println("大数据分布式协调服务框架")
   case "spark" => println("大数据分布式内存计算框架")
   case _ => println("未匹配")
}
posted @ 2021-05-04 15:58  Binge-和时间做朋友  阅读(156)  评论(0编辑  收藏  举报