标签:
函数的默认参数
例:
def decorate(str: String, left: String = “[”, right: String = “]”) = left + str + right
无参函数的调用可以不使用括号。但默认参数不代表没有参数。对于所有参数都是默认参数的函数,其调用必须使用括号。
例:
def helloSpark(name:String = “Spark”){
println(name)
}
调用该函数:
helloSpark 错误
helloSpark() 正确
helloSpark(“Java”)
函数带名参数
例:
def sum(x: Int, y: Int) = {
x + y
}
// 调用sum
val s = sum(y = 18 , x = 82))
函数的变长参数
例:
def sum(args : Int*) = {
var result = 0
for(arg <- args) result +=arg
result
}
def printEachStr(args : String*) = {
args.foreach(args => println(x))
}
lazy值
lazy值在定义时,并不计算该值,而是在使用该值时才会计算并真正赋值。
lazy值多用于值的计算过程非常复杂或非常耗费计算资源的情况。
例:
lazy val words = scala.io.Source.fromFile(“/usr/share/dict/words”).mkString
如果程序从不访问words,那么文件也不会被打开。
异常处理(throw/try)
Scala处理异常一般通过throw抛出一个异常并中止,要么捕获并处理该异常,要么简单中止之。
异常抛出:throw new IllegalArgumentException
异常捕获与处理:try{函数体} catch{case…;case…}
catch使用模式匹配处理不同异常。
异常捕获并中止:try{函数体} finally{A.close()}
try-catch-finally表达式
try{函数体} catch{case…;case…} finally{A.close()}
throw、try-catch-finally表达式都能生成值。
如:throw new IllegalArgumentException(“Error!”)
def f():Int=try{1} finally{2}
例:抛出异常。
val n = 99
val half = if(n%2 == 0) n/2 else throw new RuntimeException(“N must be event”)
例:捕获异常
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)
}
Scala数组
定长数组
声明数组的基本格式:
val arr = new Array[T](N)
例:
val nums = new Array[Int](10)
val strs = new Array[String](10)
数组声明时若不给出值,会被初始化,初始化后同样能对数组成员进行赋值。
数组成员初始化,如Int类型的会都被初始化为0,String类型的会被初始化为null。
为数组直接赋值
基本格式:
val arr = Array( x1,x2,....xn);
例:
val s = Array(“Hello”,”World”)
访问数组元素
使用( ) ,而不是[ ] 来访问元素。
为数组元素赋值
s(1) = "Scala"
变长数组
使用变长数组需要引入包:
import scala.collection.mutable.ArrayBuffer
声明一个空的数组缓存,此时b是一个全为空的数组,数组长度为0。
val b = ArrayBuffer[Int]()
在数组尾部增加一个元素“1”。
b+=1
在数组尾部增加一系列元素“2,3”。
b+=(2,3)
将数组Array(5,8,13,21)中的元素增加在b数组尾部。
b++=Array(5,8,13,21)
移除最后3个元素
b.trimEnd(3)
在标记位为2的元素前插入元素。
b.insert(2,-2)
在标记位2的元素前插入一系列元素。
b.insert(2,-3,-5)
移除标记位为3的元素。
b.remove(3)
移出标记位为1及其之后的元素,共移除2个元素。
b.remove(1,2)
把变长数组转换为定长数组。
val c = b.toArray
把定长数组转换为变长数组
val d = c.toBuffer
遍历数组
按数组序号遍历。
for(i <- 0 until a.length) {
println(i+”:”+a(i))
}
直接遍历数组的成员(这是更好的做法)
for(i <- array) {
println(i)
}
通过遍历数组的下标获得成员
for(i <- 0 to(C.length-1) {
println(C(i))
}
每两个元素一条进行遍历
for(i <- 0 to (C.length,2) ) {
println(C(i))
}
倒序遍历
for(i <- (0 to C.length).reverse) {
println(C(i))
}
通过for语句枚举数组成员,可以实现多种数组控制,如把数组成员各加1并生成新数组:
val NEW=for(i <- C) yield i+1
这种数组生成是对应原数组类型的(定长/变长)
多维数组
val matrix = Array.ofDim[Double](3,4) //三行,四行
val triangle = new Array[Array[Int]](10)
for (i <- 0 until triangle.length)
定长数组与变长数组
对于Scala更鼓励使用定长数组。
标签:
原文地址:http://www.cnblogs.com/shijiaqi1066/p/4604427.html