vlambda博客
学习文章列表

scala中下划线的几种含义

1. 将方法转变为函数


  
    
    
  
    def method1(x:Int,y:Int)=x*yval 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和yList(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) // wykprintln(t._2) // 1.23println(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= _  

 希望本文对你有帮助,请点个赞鼓励一下作者吧~ 谢谢!