//列出当前目录的文件和文件夹 val filesHere = (new java.io.File(".")).listFiles
for (file <- filesHere) println(file)
//打印1到4 for (i <- 1 to 4) println(i)
//打印1到3 for (i <- 1 until 4) println(i)
//for循环中的过滤功能 for (file <- filesHere if file.getName.endsWith("project")) println(file)
//for循环中的过滤功能,多个条件用;号分隔 for (file <- filesHere if file.isFile; if file.getName.endsWith("sbt") ) println(file)
//嵌套枚举 for( a <- 1 to 3; b <- 1 to 3){ println( "Value of a: " + a ); println( "Value of b: " + b ); }
//for循环采用yield,可以从存储中返回for循环中的变量的值,输出List(1, 2, 4, 5, 6, 7) val numList = List(1,2,3,4,5,6,7,8,9,10) System.out.println( for{ a <- numList if a != 3; if a < 8 }yield a )
4.使用try表达式处理异常
抛出异常
1 2 3 4 5 6 7
//抛出异常 def isEven(n : Int): Unit ={ val half = if (n % 2 == 0) n / 2 else throw new RuntimeException("n必须是偶数") }
捕获异常,finally语句
1 2 3 4 5 6 7 8 9 10 11 12
val file = new FileReader("input.txt") try { //使用文件 } catch { //捕获异常 case ex: FileNotFoundException => case ex: IOException => } finally { //确保文件关闭 file.close() }
catch子语句的返回值
1 2 3 4 5 6 7 8
//try-catch-finally语句的返回值 def urlFor(path:String) = try{ new URL(path) }catch{ case e:MalformedURIException => new URL("www.scala-lang.org") }
避免使用finally子句返回值
5.匹配(match)表达式
Scala的match表达式类似于switch语句,其中 _ 表示其他的情况
match表达式中的每一个备选项中break是隐含的,也就是不允许从一个备选项中落到下一个备选项中
1 2 3 4 5 6 7 8 9
//匹配表达式 val firstArg = if (args.length > 0) args(0) else "" firstArg match { case "1" => println("A") case "2" => println("B") case "3" => println("C") case _ => println("D") }