1.val不变量,var变量,建议使用val,申明不用加类型
2.加类型申明:val xmax,ymax:String = null
val声明的变量仅仅不允许引用重新分配,而不阻止对象内部的变化
Unit
scala中的()叫做Unit类,相当于其他语言中的void,表示无值.
scala异常与Java类似,但是scala没有受检异常 ,既不需要在方法声明时声明会抛出的异常。
1.可以在if/else处抛出异常
2.异常处理过程。
try{
process(in)
}catch{
case _:MalformedUrlException=>print();
case ex:IOException=>ex.printtlnStack()
}
这儿的_代表丢弃异常。
3.可以使用try{}catch{}finally{}
定义:
object TrafficLightColor extends Enumeration{val Red,Yellow,Green=Value}
object TrafficLightColor extends Enumeration{val Red = Value(0,"Stop"),Yellow=Value(1,"end"),Green=Value}
其中value是一个内部类,第一个属性是ID,第二个是name
引入:import TranfficLight._
引用:for(c<-TranfficLight.values);
TranfficLight(0);
TranfficLight.withName("red")
scala中的main和脚本与Python大致相同,但是Scala的main是一个object,而Python则是统一的
as:object hell{def main(args:Array[String]){}}
as:object hello extends App{if()..}//注意没有main方法,注意这种方法仅仅使用于简单以及单线程中
scala的控制结构都可以返回一个值,因此常常像函数那样在最后一个块语句中写上放回值
当然也可以把结果赋给一个量
val filename =if (!args.isEmpty) args(0) else "default.txt"
另外也可以像常规的控制结构那样
var filename = "default.txt"
if (!args.isEmpty)
filename = args(0)
if
由于每一个表达式都有值,因此可以写出简写的三目表达式
if (x > y) x else y
1.unit和to的区别 i<-1 to 10//1...10,1 until 10//1...9
2.如果一个对象可以迭代那么可以简写 i <- object
3.在for中可以添加一个过滤器
val filesHere = (new java.io.File(".")).listFiles
for (file <filesHere if file.getName.endsWith(".scala"))
println(file)
for (
file <filesHere
if file.isFile
if file.getName.endsWith(".scala")
) println(file)//注意这人的for可用圆括号,也可用大括号
4.for中的变量没有声明,其默认val
5.to仅仅可以表示增加,如果要减少使用reverse
6.yield返回的是整个for语句块的值,因此必须把yield放在整个for语句块的值,因此如下是错的
val list = for(
file <- filesHere
if file.isFile
if !file.getName.endsWith(".scala")
){print(file); yield file}
而要把yield放在整个语句的开始
val list = for(
file <- filesHere
if file.isFile
if !file.getName.endsWith(".scala")
)yield{print(file); file}
对于一般的编程任务,可以简单的如下
def scalaFiles =for {
file <filesHere
if file.getName.endsWith(".scala")
} yield file
1.
for (p <- persons;n = p.name; if (n startsWith "To"))
yield n
for {
p <- persons
n = p.name
if (n startsWith "To")
} yield
可以看到for中至少需要一个迭代,其他的语句都可以有多个
2.有多个迭代式时,各个元素组合
for (x <- List(1, 2); y <- List("one", "two"))
yield (x, y)
结果
res3: List[(Int, java.lang.String)] =List((1,one), (1,two), (2,one), (2,two))
foreach
一般在可以迭代的类中,有一个foreach循环,foreach接受一个需要一个参数的函数,foreach在序列的每一个值上迭代使用函数
as “Hello”.foreach((c:Char)=>print(c))//一个lamda表达式
或者简单的写为,“Hello”.foreach(print)
异常
val half =if (n % 2 == 0) n / 2 else throw new RuntimeException("n must be even")
try {
val f = new FileReader("input.txt")
// Use and close file
} catch {
case ex: FileNotFoundException => // Handle missing file
case ex: IOException => // Handle other I/O error
}
Switch
val firstArg = if (args.length > 0) args(0) else ""
firstArg match {
case "salt" => println("pepper")
case "chips" => println("salsa")
case "eggs" => println("bacon")
case _ => println("huh?")
}
1.scala可以把任意类型的值用在switch中,而Java不可以。
2.case 可以加守卫
3.scala中默认break
4.switch可以返回值
val firstArg = if (!args.isEmpty) args(0) else ""
val friend = firstArg match {
case "salt" => "pepper"
case "chips" => "salsa"
case "eggs" => "bacon"
case _ => "huh?"
}
println(friend)