scala笔记四

来源:互联网 发布:mac怎么打出@ 编辑:程序博客网 时间:2024/06/07 09:04



Scala可以使用两种形式的标志符,字符数字和符号。

字符数字使用字母或是下划线开头,后面可以接字母或是数字,

符号”$”在Scala中也看作为字母。

以“$”开头的标识符为保留的Scala编译器产生的标志符使用,应用程序应该避免使用“$”开始的标识符,以免造成冲突


1var filename="default.txt"
2if(!args.isEmpty)
3  filename =args(0)

上面代码和使用Java实现没有太多区别,看起来不怎么像Scala风格,我们重新改写一下,利用if可以返回结果这个特点。

1val filename=
2   if(!args.isEmpty)   args(0)
3   else "default.txt"
这段代码使用val而无需使用var类型的变量。

使用val为函数式编程风格。


Scala 的while 和 do-while 称为“循环”而不是表达式,是因为它不产生有用的返回值

1scala> def greet() { println("hi")}
2greet: ()Unit
3 
4scala> greet() == ()
5<console>:9: warning: comparing values of types Unit and Unit using `==' will always yield true
6              greet() == ()
7                      ^
8hi
9res0: Boolean = true
另外一种可以返回Unit结果的语句为var类型赋值语句

推荐尽量避免在代码使用while循环,正如函数化编程要避免使用var变量一样。 而使用while循环时通常也会使用到var变量


改成只列出.scala文件如下:

1val filesHere = (new java.io.File(".")).listFiles
2 
3for( file <-filesHere
4   if file.isFile
5   if file.getName.endsWith(".scala")
6)  println(file)


技术上来说,抛出异常的类型为Nothing

try {
6  val = new FileReader("input.txt")
7catch {
8  case ex: FileNotFoundException =//handle missing file
9  case ex: IOException =//handle other I/O error
10}


通常情况下,finally块用来做些清理工作,而不应该产生结果,但如果在finally块中使用return来返回某个值,这个值将覆盖try-catch产生的结果,比如:

查看源代码
打印帮助
1scala> def f(): Int = try return 1 finally return 2}
2f: ()Int
3 
4scala> f
5res0: Int = 2

而下面的代码:

1scala> def g() :Int = try 1 finally 2
2g: ()Int
3 
4scala> g
5res0: Int = 1

结果却是1,上面两种情况常常使得程序员产生困惑,因此关键的一点是避免在finally生成返回值,而只用来做些清理工作,比如关闭文件。

scala中match表达式跟java中swith的区别:

一是任何类型的常量都可以用在case语句中,而不仅仅是int或是枚举类型。
二是每个case语句无需使用break,Scala不支持“fall through”。
三是Scala的缺省匹配为”_”,其作用类似java中的default.

四是scala的match表达式有返回值

1val firstArg = if (args.length >0 ) args(0else ""
2val friend = firstArg match {
3  case "salt" ="pepper"
4  case "chips" ="salsa"
5  case "eggs" ="bacon"
6  case _ ="huh?"
7}
8 
9println(friend)











0 0
原创粉丝点击