您好,登錄后才能下訂單哦!
本篇內容介紹了“Scala下劃線怎么使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Scala 的下劃線在各種語法中幾乎都要插一腳,其目的是代表某些特殊場合或者簡化代碼,不必去想命名該怎么取。下面介紹幾種下劃線的使用場合
跟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 = _ }
嚴格的說:使用 val 定義的是函數(function),使用 def 定義的是方法(method)。二者在語義上的區別很小,在絕大 多數情況下都可以不去理會它們之間的區別,但是有時候有必要了解它們之間的轉化,方法轉換為函數使用下面的方式
scala> def f1 = ()=>{} scala> val f2 = f1 _
類似Java
中的*,可以通過此方式導入包中的所有內容
//Scala import java.util._ //Java import java.util.*;
在Scala中的高階函數如map , collection, count,sortWith, filter, reduce等,都需傳入一個函數,函數的參數名字本身沒有特別的用意,所以不必再起名上糾結,直接使用_來代替參數,但是要注意單次使用,和多個參數時候的問題
val list = List(3,3,5) list.reduce(_+_) //等同于list.sum() list.map(_ * 2) list.filter(_ > 3)
使用_1 , _2的方式來訪問元組中的各個元素
val tu = (1,2,3) tu._1 tu._2
可以再數組或者集合使用_:*來轉為多個參數來使用
def addSum(nums: Int*) = { nums.sum } addSum(1 to 10: _*))
在變量名_的方式定義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()) } }
部分應用函數(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 _
在模式匹配中,可以指代默認值,類型匹配的時候,可以使用,可以省去起名字
val a = 10 a match { case _: Int => println("Int") case _ => println("defalult") }
“Scala下劃線怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。