Scala的For、Function、Lazy、Exception
for迴圈,不論在哪個語言裡面都是很基本的迴圈語句
for(i <- 1 to 2; j <- 1 to 2) print((100 * i + j) + " ")
遍歷集合:
val files = (new java.io.File(".")).listFiles()
for(file <- files){
println(file)
}
條件守衛:
for(i <- 1 to 2; j <- 1 to 2 if i != j) print((100 * i + j) + " ")
函式的定義:
def addA(x : Int) = x +100
def looper(x : Long, y : Long) : Long = {
var a = x
var b = y
while(a != 0){
val temp = a
a = b % a
b = temp
}
b //函式結果不需要return關鍵字
}
一般情況下,是不需要宣告返回值型別的,Scala很強大,能根據值進行型別推導。但是有個地方是特例,遞迴函式,必須指定返回值型別。
如果返回值為空,則使用Unit,如main:
def main(args: Array[String]): Unit = {}
或者乾脆省略掉:
def main(args: Array[String]){}
如果連引數都沒有,括號也可以省掉:
def current = age
匿名函式:
val add = (x : Int) => x +200
遞迴函式:
def fac(n:Int):Int = if (n <= 0) 1 else n * fac(n - 1)//必須指定函式返回型別
引數預設值:
def combine(content:String, left: String = "[", right: String = "]") = left + content +right//函式引數可以指定預設值
可變引數
def connected(args: Int*) = {
var result =0
for(arg <- args) result += arg
result //函式結果不需要return關鍵字
}
println("The result from a connected is : " + connected(1,2,3,4,5,6))
需要注意的是,由於在Scala中,object裡所有內容都是靜態的,所以,如果程式碼邏輯沒有封裝成函式,還是會執行的。封裝成函式後,不呼叫就不會執行。
Lazy延遲載入,只有第一次使用時才會初始化
lazy val file = Source.fromFile("E:\\scalain.txt")
for (line <- file.getLines) println(line)
假定檔案不存在,如果不加lazy,在第一句就會報錯;而加上lazy關鍵字之後,只有第一次使用的時候(file.getLines)才會報錯
異常處理:
val n = 99
try {
val half = if (n % 2 == 0) n /2 else throw
new RuntimeException("N must be event")
}catch {
case e : Exception => println("The exception is :" + e.getMessage()) //透過case匹配異常,只匹配一個。
}finally{}
for(i <- 1 to 2; j <- 1 to 2) print((100 * i + j) + " ")
遍歷集合:
val files = (new java.io.File(".")).listFiles()
for(file <- files){
println(file)
}
條件守衛:
for(i <- 1 to 2; j <- 1 to 2 if i != j) print((100 * i + j) + " ")
函式的定義:
def addA(x : Int) = x +100
def looper(x : Long, y : Long) : Long = {
var a = x
var b = y
while(a != 0){
val temp = a
a = b % a
b = temp
}
b //函式結果不需要return關鍵字
}
一般情況下,是不需要宣告返回值型別的,Scala很強大,能根據值進行型別推導。但是有個地方是特例,遞迴函式,必須指定返回值型別。
如果返回值為空,則使用Unit,如main:
def main(args: Array[String]): Unit = {}
或者乾脆省略掉:
def main(args: Array[String]){}
如果連引數都沒有,括號也可以省掉:
def current = age
匿名函式:
val add = (x : Int) => x +200
遞迴函式:
def fac(n:Int):Int = if (n <= 0) 1 else n * fac(n - 1)//必須指定函式返回型別
引數預設值:
def combine(content:String, left: String = "[", right: String = "]") = left + content +right//函式引數可以指定預設值
可變引數
def connected(args: Int*) = {
var result =0
for(arg <- args) result += arg
result //函式結果不需要return關鍵字
}
println("The result from a connected is : " + connected(1,2,3,4,5,6))
需要注意的是,由於在Scala中,object裡所有內容都是靜態的,所以,如果程式碼邏輯沒有封裝成函式,還是會執行的。封裝成函式後,不呼叫就不會執行。
Lazy延遲載入,只有第一次使用時才會初始化
lazy val file = Source.fromFile("E:\\scalain.txt")
for (line <- file.getLines) println(line)
假定檔案不存在,如果不加lazy,在第一句就會報錯;而加上lazy關鍵字之後,只有第一次使用的時候(file.getLines)才會報錯
異常處理:
val n = 99
try {
val half = if (n % 2 == 0) n /2 else throw
new RuntimeException("N must be event")
}catch {
case e : Exception => println("The exception is :" + e.getMessage()) //透過case匹配異常,只匹配一個。
}finally{}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28912557/viewspace-1826265/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- swift 中的 lazySwift
- error C2713: Only one form of exception handling permitted per functionErrorORMExceptionMITFunction
- spring中的default-lazy-init引數和lazy-initSpring
- Lazy安裝
- 【Scala篇】--Scala中的函式函式
- $(function(){})與(function($){....})(jQuery)的區別FunctionjQuery
- 如何使用 C# 中的 LazyC#
- spring的延遲初始化bean (default-lazy-init 與 lazy-init )SpringBean
- javascript 中function(){},new function(),new Function(),Function 摘錄JavaScriptFunction
- Scala學習(五)---Scala中的類
- ExceptionException
- Error: Exception was raised when calling per-thread-terminate function in extension lrwreplaymain.dlErrorExceptionAIthreadFunction
- 【Scala】Scala之ObjectObject
- hibernate 的lazy載入問題
- [譯] lazy var in ios swiftiOSSwift
- 理解C# Lazy<T>C#
- v2 img lazy
- js的functionJSFunction
- 有趣的 Scala 語言: 簡潔的 Scala 語法
- 【Scala】Scala之TraitsAI
- Oracle 中的exception——(Raise)OracleExceptionAI
- Exception和Error的理解ExceptionError
- Vue中computed的本質—lazy WatchVue
- 在Hibernate中使用Lazy="false" 的困惑False
- Oracle exceptionOracleException
- Java——ExceptionJavaException
- Scala 的學習
- Scala的泛型泛型
- Scala的Abstract Types
- Scala的HelloWorld程式
- Scala的繼承繼承
- Scala的applyAPP
- iOS swift lazy loadingiOSSwift
- 【Scala】Scala之Packaging and ImportsImport
- Scala學習(六)---Scala物件物件
- JavaScript中的 FunctionJavaScriptFunction
- 常用的ABAP functionFunction
- java.util.function 中的 Function、Predicate、ConsumerJavaFunction