1.简述

Scala 的下划线在各种语法中简直都要插一脚,其目标是代表某些非凡场合或者简化代码,不用去想命名该怎么取。上面介绍几种下划线的应用场合

2. _ 有哪些应用形式

2.1 初始化变量

Java 相似,成员变量未初始化会给一个默认值,Scala中也一样,只能够初始化成员变量,然而须要利用_来特地阐明,要留神的是_如果初始化为null 要特地指明变量的类型,否则变量类型就是Null, 初始化只针对var 而不能是val, 其余状况应用变量相似和_即可达到初始化的成果

// _ 对应的默认值:整型默认值0;浮点型默认值0.0;String与援用类型,默认值null; Boolean默认值falseclass Student{    //String类型的默认值为null    var name : String = _    var age: Int = _    var amount: Double = _    var mOrF: Boolean = _}

2.2 办法转为函数

严格的说:应用 val 定义的是函数(function),应用 def 定义的是办法(method)。二者在语义上的区别很小,在绝大
少数状况下都能够不去理睬它们之间的区别,然而有时候有必要理解它们之间的转化,办法转换为函数应用上面的形式

scala> def f1 = ()=>{}scala> val f2 = f1 _ 

2.3 导包

相似Java 中的*,能够通过此形式导入包中的所有内容

//Scalaimport java.util._//Javaimport java.util.*; 

2.4 高阶函数中省去变量名

在Scala中的高阶函数如map , collection, count,sortWith, filter, reduce等,都需传入一个函数,函数的参数名字自身没有特地的用意,所以不用再起名上纠结,间接应用_来代替参数,然而要留神单次应用,和多个参数时候的问题

val list = List(3,3,5)list.reduce(_+_) //等同于list.sum()list.map(_ * 2)list.filter(_ > 3) 

2.5 拜访元组

应用_1 , _2的形式来拜访元组中的各个元素

val tu = (1,2,3)tu._1tu._2 

2.6 汇合转为多个参数

能够再数组或者汇合应用_:*来转为多个参数来应用

def addSum(nums: Int*) = {  nums.sum}addSum(1 to 10: _*))

2.7 setter办法的实现

在变量名_的形式定义setter办法,

能够看进去_leg 是彻底的封装,而leg_是leg办法的set版本

class Dog {  private var _leg = 0  def leg: Int = _leg  def leg_=(newLag: Int) = {    _leg = newLag  }  def get() = {    _leg  }}object GetterAndSettre {  def main(args: Array[String]): Unit = {    val dog = new Dog    dog.leg_=(4) //等同于 dog.leg = 4 ,都是批改了_leg的值    println(dog.get())    dog.leg = 5    println(dog.get())  }}

2.8 局部函数应用

局部利用函数(Partial Applied Function)也叫偏利用函数,局部利用函数是指短少局部(甚至全副)参数的函数。如果一个函数有n个参数, 而为其提供少于n个参数, 那就失去了一个局部利用函数

// 定义一个函数def add(x:Int, y:Int, z:Int) = x+y+z// Int不能省略def addX = add(1, _:Int, _:Int)addX(2,3)addX(3,4)def addXAndY = add(10, 100, _:Int)addXAndY(1)def addZ = add(_:Int, _:Int, 10)addZ(1,2)// 省略了全副的参数,上面两个等价。第二个更罕用def add1 = add(_: Int, _: Int, _: Int)def add2 = add _ 

2.9 模式匹配

在模式匹配中,_能够指代默认值,类型匹配的时候,能够应用_,能够省去起名字

val a = 10a match {  case _: Int => println("Int")  case _ => println("defalult")} 

3. 总结

下面次要讲了_的九种用法,其大大简化了Scala的变量命名和开发过程,多用Scala 来简化代码,也是一个Scala程序员的必修课,当然写写Java式的Scala 可能更易懂把,哈哈哈哈
吴邪,小三爷,混迹于后盾,大数据,人工智能畛域的小菜鸟。
更多请关注