码迷,mamicode.com
首页 > 其他好文 > 详细

Scala基础02:函数,异常

时间:2015-06-27 19:39:11      阅读:281      评论:0      收藏:0      [点我收藏+]

标签:

函数的默认参数

例:

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更鼓励使用定长数组。

Scala基础02:函数,异常

标签:

原文地址:http://www.cnblogs.com/shijiaqi1066/p/4604427.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!