常用表达式
if表达式
- 可以返回值的,类型会自动推断
val isAdult = if (age > 18) 1 else 0
循环
while(true) {}
for(i <- 1 to n) {}
//[1,n]for(i <- 1 until n) {}
//[1,n)for(i <- (1 until n).reverse)
//反向遍历for(c <- "Hello World") print(c)
for(i <- 1 to 9; j <- 1 to 9) {}
for(i <- 1 to 100 if i % 2 == 0) println(i)
//if守卫for(i <- 1 to 3) yield i
//推导式:构造集合Vector(1, 2, 3)
异常,与java类似
try {
throw new IllegalArgumentException("")
} catch {
case exception: IllegalArgumentException => println(exception)
} finally {
}
Actor
- Scala的Actor类似于Java中的多线程编程,尽可能地避免锁和共享状态
- Spark使用的线程框架是Akka,其实现了类似Scala Actor的模型
import scala.actors.Actor
class HelloActor extends Actor {
def act() {
while (true) {
receive {
case name: String => println("Hello, " + name)
}
}
}
}
val helloActor = new HelloActor
helloActor.start()
helloActor ! "leo"
- 默认情况下,消息都是异步的,同步发送消息是
val reply = actor !? message
- 如果要异步发送一个消息,但是在后续要获得消息的返回值, 那么可以使用Future。即!!语法。
val future = actor !! message
val reply = future()