1. 程式人生 > >scala語言基礎學習

scala語言基礎學習



1:書寫遞迴函式的時候,必須指定返回型別,不然編譯器無法校驗遞迴函式的返回值
def fac(n:Int):Int = if(n<=0) 1 else n * fac(n-1)


2:當要往一個序列傳入一個引數區間的時候可以加:_*
val s = sum (1 to 5 :_*)


def recursiveSum(args:Int*):Int={
if(args.length ==0) 0
elseargs.head+recursiveSum(args.tail:_*)
}




3:懶值
當一個變數被宣告為lazy的時候,只有在第一次別調用的時候才會去初始化它的值。
lazy val words =scala.io.Source.fromFile("/usr/share.dict.words").mkString




4:ArrayBuffer可變長度的集合
val b = ArrayBuffer[Int]()
b+=1
b+=(1,2,3,4)
b++=Array(2,4,6,8)
b.toArray
b.toBuffer(將陣列轉換成陣列緩衝)




5:陣列轉換
a.fliter(_ % 2==0).map(2*_)
for(elem<-a if elem % 2==0)yield 2*elem   ===》守衛模式


6:二維陣列
val matrix = Array.ofDim[Double](3,4)   matrix(row)(column)
---不規則的二維陣列
val triangle = new Array[Array[Int]](10)
for(i<-0 until triangle.length)
triangle(i) = new Array[Int](i+1)


7:類的學習
如果類屬性不需要任何getter和setter可以將該欄位宣告為private[this]
Scala允許你將訪問權賦予指定的類,private[類名]修飾符可以定義僅有指定類的方法可以訪問給定欄位,這裡類名必須是當前定義的類或者包含該類的外部類


如果類名之後沒有引數,該類具備一個午參主構造器,則會樣一個構造器僅僅簡單執行類體中的所有語句而已
class MyProg{
private val progs = new Properties
props.load(new FileReader("myprog.properties"))
}


類的伴生物件可以相互訪問私有特性,他們必須存在於同一個原始檔中 class Account{裡面可以呼叫下面伴生物件的私有方法Account.def()進行呼叫}  Object Accout{}




每個包都可以有一個包物件,需要在父包中定義它,且名稱和子包一樣。
package com.hostman.impatient
package Object people{
val defaultName ="john"
}
package people{
class person{
var name = defaultName}
...
}




包引入的重新命名還有隱藏
import java.util.{HashMap=>JavaHashMap}
import Scala.collection.mutable._
----隱藏(所有HashMap是指向Scala.collection.mutable.HashMap
import java.util.(HashMap=>_,_}
import Scala.collection.mutable._


隱式引入(後面引入的會覆蓋前面引入的,針對同名類)
import java.lang_
import scala._
import Predef._


繼承類的時候,繼承抽象類時,重寫抽象方法不需要寫override,如果不是抽象方法,override是必須寫的


檔案讀取
import scala.io.Source
val source = Source.fromFile("myfile.txt","UTF-8")
val lineIterator = source.getLines
for(1<-lineIterator){}
val lines = source.getLines.toArray
val contents = source.mkString


---讀取字元
val source = Source.fromFile("myfile.txt","UTF-8")
val iter=  source.buffered
while(iter.hashNext){if(iter.head ...}


source.close()




迴圈遍歷某目錄下的所有子目錄
import java.io.File
def subdirs(dir :File):Iterator[File]={
val children =dir.listFiles.filter(_.isDirectory)
children.toIterator ++ children.toIterator.flatMap(subdirs _)
}