Skip to content

Instantly share code, notes, and snippets.

@ihower
Created August 3, 2010 19:23
Show Gist options
  • Save ihower/506963 to your computer and use it in GitHub Desktop.
Save ihower/506963 to your computer and use it in GitHub Desktop.

== Scala 2.7.5

scalac shapes.scala shapes-actor.scala
scala shapes-actor-script.scala // it works

== Scala 2.8.0

scalac shapes.scala shapes-actor.scala
scala shapes-actor-script.scala // NOT works
scala -cp . shapes-actor-script.scala // NOT works

> /Users/ihower/scala/code-examples/IntroducingScala/shapes-actor-script.scala:3: error: not found: value shapes
> import shapes._
>      ^
> one error found

scala -cp ~/scala/code-examples/IntroducingScala shapes-actor-script.scala // it works 需要加上絕對路徑
// code-examples/IntroducingScala/shapes-actor-script.scala
import shapes._
ShapeDrawingActor.start()
ShapeDrawingActor ! new Circle(new Point(0.0,0.0), 1.0)
ShapeDrawingActor ! new Rectangle(new Point(0.0,0.0), 2, 5)
ShapeDrawingActor ! new Triangle(new Point(0.0,0.0),
new Point(1.0,0.0),
new Point(0.0,1.0))
ShapeDrawingActor ! 3.14159
ShapeDrawingActor ! "exit"
// code-examples/IntroducingScala/shapes-actor.scala
package shapes {
import scala.actors._
import scala.actors.Actor._
object ShapeDrawingActor extends Actor {
def act() {
loop {
receive {
case s: Shape => s.draw()
case "exit" => println("exiting..."); exit
case x: Any => println("Error: Unknown message! " + x)
}
}
}
}
}
// code-examples/IntroducingScala/shapes.scala
package shapes {
class Point(val x: Double, val y: Double) {
override def toString() = "Point(" + x + "," + y + ")"
}
abstract class Shape() {
def draw(): Unit
}
class Circle(val center: Point, val radius: Double) extends Shape {
def draw() = println("Circle.draw: " + this)
override def toString() = "Circle(" + center + "," + radius + ")"
}
class Rectangle(val lowerLeft: Point, val height: Double, val width: Double)
extends Shape {
def draw() = println("Rectangle.draw: " + this)
override def toString() =
"Rectangle(" + lowerLeft + "," + height + "," + width + ")"
}
class Triangle(val point1: Point, val point2: Point, val point3: Point)
extends Shape {
def draw() = println("Triangle.draw: " + this)
override def toString() =
"Triangle(" + point1 + "," + point2 + "," + point3 + ")"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment