summaryrefslogtreecommitdiff
path: root/test/files/run/Meter.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2012-02-19 18:02:44 +0100
committerMartin Odersky <odersky@gmail.com>2012-02-19 18:03:19 +0100
commit64aaef72504b46b9d40359eb0476ad8416f36023 (patch)
treecb41068323ee789847e287a9caf6695856580f16 /test/files/run/Meter.scala
parent8cc7de74d35b437b7126d02a6219796b5872ac14 (diff)
downloadscala-64aaef72504b46b9d40359eb0476ad8416f36023.tar.gz
scala-64aaef72504b46b9d40359eb0476ad8416f36023.tar.bz2
scala-64aaef72504b46b9d40359eb0476ad8416f36023.zip
Implemented super access in value classes, restrictions for value classes.
Diffstat (limited to 'test/files/run/Meter.scala')
-rw-r--r--test/files/run/Meter.scala55
1 files changed, 40 insertions, 15 deletions
diff --git a/test/files/run/Meter.scala b/test/files/run/Meter.scala
index 936b8d98b7..42a3aac5f8 100644
--- a/test/files/run/Meter.scala
+++ b/test/files/run/Meter.scala
@@ -1,23 +1,46 @@
-class Meter(val underlying: Double) extends AnyVal with Printable {
- def + (other: Meter): Meter =
- new Meter(this.underlying + other.underlying)
- def / (other: Meter): Double = this.underlying / other.underlying
- def / (factor: Double): Meter = new Meter(this.underlying / factor)
- def < (other: Meter): Boolean = this.underlying < other.underlying
- override def toString: String = underlying.toString+"m"
-}
-object Meter extends (Double => Meter) {
+package a {
+ class Meter(val underlying: Double) extends AnyVal with _root_.b.Printable {
+ def + (other: Meter): Meter =
+ new Meter(this.underlying + other.underlying)
+ def / (other: Meter): Double = this.underlying / other.underlying
+ def / (factor: Double): Meter = new Meter(this.underlying / factor)
+ def < (other: Meter): Boolean = this.underlying < other.underlying
+ def toFoot: Foot = new Foot(this.underlying * 0.3048)
+ override def print = { Console.print(">>>"); super.print; proprint }
+ override def toString: String = underlying.toString+"m"
+ }
- def apply(x: Double): Meter = new Meter(x)
+ object Meter extends (Double => Meter) {
+
+ def apply(x: Double): Meter = new Meter(x)
- implicit val boxings = new BoxingConversions[Meter, Double] {
- def box(x: Double) = new Meter(x)
- def unbox(m: Meter) = m.underlying
+ implicit val boxings = new BoxingConversions[Meter, Double] {
+ def box(x: Double) = new Meter(x)
+ def unbox(m: Meter) = m.underlying
+ }
}
-}
-trait Printable extends Any { def print: Unit = Console.print(this) }
+ class Foot(val unbox: Double) extends AnyVal {
+ def + (other: Foot): Foot =
+ new Foot(this.unbox + other.unbox)
+ override def toString = unbox.toString+"ft"
+ }
+ object Foot {
+ implicit val boxings = new BoxingConversions[Foot, Double] {
+ def box(x: Double) = new Foot(x)
+ def unbox(m: Foot) = m.unbox
+ }
+ }
+}
+package b {
+ trait Printable extends Any {
+ def print: Unit = Console.print(this)
+ protected def proprint = Console.print("<<<")
+ }
+}
+import a._
+import _root_.b._
object Test extends App {
{
@@ -72,6 +95,8 @@ object Test extends App {
println(ys)
val zs = arr map (_ / Meter(1))
println(zs)
+ val fs = arr map (_.toFoot)
+ println(fs)
}
}