more interesting demos
This commit is contained in:
parent
4d024f4975
commit
0ff2e3540a
2 changed files with 99 additions and 27 deletions
|
|
@ -1,12 +1,69 @@
|
|||
//http://www.scala-lang.org/node/227
|
||||
/* Defines a new method 'sort' for array objects */
|
||||
object implicits extends Application {
|
||||
implicit def arrayWrapper[A : ClassManifest](x: Array[A]) =
|
||||
new {
|
||||
def sort(p: (A, A) => Boolean) = {
|
||||
util.Sorting.stableSort(x, p); x
|
||||
// http://www.scala-lang.org/node/54
|
||||
|
||||
package examples.actors
|
||||
|
||||
import scala.actors.Actor
|
||||
import scala.actors.Actor._
|
||||
|
||||
abstract class PingMessage
|
||||
case object Start extends PingMessage
|
||||
case object SendPing extends PingMessage
|
||||
case object Pong extends PingMessage
|
||||
|
||||
abstract class PongMessage
|
||||
case object Ping extends PongMessage
|
||||
case object Stop extends PongMessage
|
||||
|
||||
object pingpong extends Application {
|
||||
val pong = new Pong
|
||||
val ping = new Ping(100000, pong)
|
||||
ping.start
|
||||
pong.start
|
||||
ping ! Start
|
||||
}
|
||||
|
||||
class Ping(count: Int, pong: Actor) extends Actor {
|
||||
def act() {
|
||||
println("Ping: Initializing with count "+count+": "+pong)
|
||||
var pingsLeft = count
|
||||
loop {
|
||||
react {
|
||||
case Start =>
|
||||
println("Ping: starting.")
|
||||
pong ! Ping
|
||||
pingsLeft = pingsLeft - 1
|
||||
case SendPing =>
|
||||
pong ! Ping
|
||||
pingsLeft = pingsLeft - 1
|
||||
case Pong =>
|
||||
if (pingsLeft % 1000 == 0)
|
||||
println("Ping: pong from: "+sender)
|
||||
if (pingsLeft > 0)
|
||||
self ! SendPing
|
||||
else {
|
||||
println("Ping: Stop.")
|
||||
pong ! Stop
|
||||
exit('stop)
|
||||
}
|
||||
}
|
||||
}
|
||||
val x = Array(2, 3, 1, 4)
|
||||
println("x = "+ x.sort((x: Int, y: Int) => x < y))
|
||||
}
|
||||
}
|
||||
|
||||
class Pong extends Actor {
|
||||
def act() {
|
||||
var pongCount = 0
|
||||
loop {
|
||||
react {
|
||||
case Ping =>
|
||||
if (pongCount % 1000 == 0)
|
||||
println("Pong: ping "+pongCount+" from "+sender)
|
||||
sender ! Pong
|
||||
pongCount = pongCount + 1
|
||||
case Stop =>
|
||||
println("Pong: Stop.")
|
||||
exit('stop)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue