scala中下划线的几种含义
1. 将方法转变为函数
-
def method1(x:Int,y:Int)=x*y
val func1=method1 _ // 注意这里的空格
method1(2,3)
func1(2,3)
// res: Int = 6
2. 表示集合里的每个元素
-
val list1=List(1,2,3,4)
val list2=list1.map(_ * 10)
// list2: List[Int] = List(10, 20, 30, 40)
// 用_分别表示二元函数中的参数x和y
List(10, 5, 8, 1, 7).sortWith(_ < _)
// res: List[Int] = List(1, 5, 7, 8, 10)
3. 获取元组Tuple中的元素
-
val t=("wyk",1.23,100)
println(t._1) // wyk
println(t._2) // 1.23
println(t._3) // 100
4. 模式匹配
包括字符串匹配、类型匹配、数组匹配、集合匹配和元组匹配
-
val word="wyk"
val result =word match{
case "wyk" => 1
case "csdn" => 2
case _ => 0 // 以上都没有匹配到才会被执行
}
// 通过模式匹配获取元组的元素,当不需要某个值的时候可以使用_替代,例如
val t1 = (1, 1.23, "wyk")
val (first, second, _) = t1
// 此时新定义了两个常量 first second
// first: Int = 1
// second: Double = 1.23
5. 队列匹配
val list=List(1,2,3,4)
list match{
case List( _,_* ) =>1 // List(_,_*)表示匹配以任意开头,任意数量的列表。其他类似的有:List(3,x,y) 匹配3开头,共3个元素的list。List(3,_*) 匹配3开头,任意数量的list。
case _ =>2 //除此之外 匹配此处
}
6. 通配符
-
//导包引入,表示引入的时候将 scala.collection.mutable 包下面所有的类都导入
import scala.collection.mutable._
7. 变长参数
-
def sum(args: Int*) = {
var result = 0
for (arg <- args) result += arg
result
}
val s1 = sum(1,2,3,4,5)
// 等效于
val s2 = sum(1 to 5: _*)
8. 初始化变量
// 在这里, age 也可以声明为 0 ,例:var age:Int=0 。这里的下划线和 0 的作用是一样的。
var age:Int=_
// 在这里, name 也可以声明为 null ,例:var name:String=null 。这里的下划线和 null 的作用是一样的。
var name:String= _
希望本文对你有帮助,请点个赞鼓励一下作者吧~ 谢谢!