有返回值函數
def 函數名(參數名 : 參數類型): 返回值類型 = {
// 函數體
}
無返回值函數
// 不聲明返回值類型的函數前提是右側函數體不包含遞歸的語句
def 函數名(參數名 : 參數類型) = {
// 函數體
}
// 又或者
def 函數名(參數名 : 參數類型): Unit = {
// 函數體
}
默認參數
def sayHello(firstName:String, middleName:String = "William", lastName:String = "Croft") : String = {
firstName + " " + middleName + " " + lastName
}
// 如果給出的參數不夠,則會從左往右依次應用參數
命名參數
sayHello("Mick", lastName = "Mike", middleName = "Jack")
// 可以混合使用未命名參數和帶名參數,但是未命名參數必須排在帶名參數前面
變長參數
def sum(nums : Int*) = {
var res = 0
for (num
res
}
使用序列調用變長參數
// 冒號跟下劃線之間有空格
val s = sum(1 to 5 : _*)
使用遞歸函數實現累加
def sum(nums : Int*):Int = {
if(nums.length == 0) 0
else nums.head + sum(nums.tail : _*)
}
過程
如果函數體直接包裹在了花括號裡面,而沒有使用 = 連接,則函數的返回值類型就是 Unit 。這樣的函數就被稱之為
過程。過程通常用於不需要返回值的函數。def sayHello(name: String) = "Hello, " + namedef sayHello(name: String) {
print("Hello, " + name);"Hello, " + name
}
// 過程還有一種寫法,就是將函數的返回值類型定義為 Unit
def sayHello(name: String) : Unit = "Hello, " + name
Lazy
如果將一個變量聲明為 lazy ,則只有在第一次使用該變量時,變量對應的表達式才會發生計算。這種特性對於特別耗時的計算操作特別有用,比如打開文件進行磁盤 IO ,進行網絡 IO 等。
import scala.io.Source._
// mkString代表將 BufferedSource 轉換成文本
lazy val lines = fromFile("C://Users//Administrator//Desktop//test.txt").mkString
異常
try {
// 捕捉異常
throw new IllegalArgumentException("x should not be negative")
} catch {
// 出現異常之後該怎麼做
case _: IllegalArgumentException => println("Illegal Argument!")
} finally {
// 無論是否發生異常,都會進行的操作,通常用來釋放資源,關閉連接等
print("release resources!")
}try {
throw new IOException("user defined exception")
} catch {
// 根據不同的異常類別進行不同的處理
case e1: IllegalArgumentException => println("illegal argument")
case e2: IOException => println("io exception")
}
歡迎關注,本號將持續分享本人在編程路上的各種見聞。
閱讀更多 California458 的文章