溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Scala下劃線怎么使用

發(fā)布時間:2021-12-08 14:41:23 來源:億速云 閱讀:136 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“Scala下劃線怎么使用”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

1.簡述

Scala 的下劃線在各種語法中幾乎都要插一腳,其目的是代表某些特殊場合或者簡化代碼,不必去想命名該怎么取。下面介紹幾種下劃線的使用場合

2. _ 有哪些使用方式

2.1 初始化變量

Java 類似,成員變量未初始化會給一個默認值,Scala中也一樣,只可以初始化成員變量,但是需要利用_來特別說明,要注意的是_如果初始化為null 要特別指明變量的類型,否則變量類型就是Null, 初始化只針對var 而不能是val, 其他情況使用變量類似和_即可達到初始化的效果

// _ 對應的默認值:整型默認值0;浮點型默認值0.0;String與引用類型,默認值null; Boolean默認值false
class Student{
    //String類型的默認值為null
    var name : String = _
    var age: Int = _
    var amount: Double = _
    var mOrF: Boolean = _
}

2.2 方法轉(zhuǎn)為函數(shù)

嚴格的說:使用 val 定義的是函數(shù)(function),使用 def 定義的是方法(method)。二者在語義上的區(qū)別很小,在絕大 多數(shù)情況下都可以不去理會它們之間的區(qū)別,但是有時候有必要了解它們之間的轉(zhuǎn)化,方法轉(zhuǎn)換為函數(shù)使用下面的方式

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

2.3 導包

類似Java 中的*,可以通過此方式導入包中的所有內(nèi)容

//Scala
import java.util._
//Java
import java.util.*;

2.4 高階函數(shù)中省去變量名

在Scala中的高階函數(shù)如map , collection, count,sortWith, filter, reduce等,都需傳入一個函數(shù),函數(shù)的參數(shù)名字本身沒有特別的用意,所以不必再起名上糾結(jié),直接使用_來代替參數(shù),但是要注意單次使用,和多個參數(shù)時候的問題

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._1
tu._2

2.6 集合轉(zhuǎn)為多個參數(shù)

可以再數(shù)組或者集合使用_:*來轉(zhuǎn)為多個參數(shù)來使用

def addSum(nums: Int*) = {
  nums.sum
}

addSum(1 to 10: _*))

2.7 setter方法的實現(xiàn)

在變量名_的方式定義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 部分函數(shù)使用

部分應用函數(shù)(Partial Applied Function)也叫偏應用函數(shù),部分應用函數(shù)是指缺少部分(甚至全部)參數(shù)的函數(shù)。如果一個函數(shù)有n個參數(shù), 而為其提供少于n個參數(shù), 那就得到了一個部分應用函數(shù)

// 定義一個函數(shù)
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)
// 省略了全部的參數(shù),下面兩個等價。第二個更常用
def add1 = add(_: Int, _: Int, _: Int)
def add2 = add _

2.9 模式匹配

在模式匹配中,可以指代默認值,類型匹配的時候,可以使用,可以省去起名字

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

“Scala下劃線怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI