diff options
author | Martin Odersky <odersky@gmail.com> | 2012-02-14 18:37:56 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2012-02-14 18:37:56 +0100 |
commit | ea96b48d9274e90b64b66e51507460c004c01643 (patch) | |
tree | 0ee4f7f9f1283c6fa1b510a16e8942ef74e1e08d /test/files/run | |
parent | 5bbc2d089f0f440612d6219479ea8e5cea0f01a4 (diff) | |
download | scala-ea96b48d9274e90b64b66e51507460c004c01643.tar.gz scala-ea96b48d9274e90b64b66e51507460c004c01643.tar.bz2 scala-ea96b48d9274e90b64b66e51507460c004c01643.zip |
Changed erasure behavior of arrays to use always boxed representation.
Conflicts:
test/files/run/Meter.scala
Diffstat (limited to 'test/files/run')
-rw-r--r-- | test/files/run/Meter.scala | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/test/files/run/Meter.scala b/test/files/run/Meter.scala index 0db917aeee..66d35bfc75 100644 --- a/test/files/run/Meter.scala +++ b/test/files/run/Meter.scala @@ -6,6 +6,28 @@ class Meter(val underlying: Double) extends AnyVal with Printable { def < (other: Meter): Boolean = this.underlying < other.underlying override def toString: String = underlying.toString+"m" } +object Meter extends (Double => Meter) { + + def apply(x: Double): Meter = new Meter(x) + + class FlatArray(underlying: Array[Double]) { + def length = underlying.length + def apply(i: Int): Meter = new Meter(underlying(i)) + def update(i: Int, m: Meter) = underlying(i) = m.underlying + override def toString = underlying.toList map Meter mkString ("Meter.FlatArray(", ", ", ")") + } + + object FlatArray { + + def apply(xs: Meter*) = { + val elems = Array.ofDim[Double](xs.length) + for (i <- 0 until xs.length) + elems(i) = xs(i).asInstanceOf[Double] + new FlatArray(elems) + } + } + +} trait Printable extends Any { def print: Unit = Console.print(this) } object Test extends App { @@ -37,5 +59,24 @@ object Test extends App { val b: Any = y println("a == b: "+(a == b)) + { val arr = Array(x, y + x) + println(arr.deep) + def foo[T <: Printable](x: Array[T]) { + for (i <- 0 until x.length) { x(i).print; println(" "+x(i)) } + } + val m = arr(0) + println(m) + foo(arr) + } + + val arr = Meter.FlatArray(x, y + x) + println(arr) + def foo(x: Meter.FlatArray) { + for (i <- 0 until x.length) { x(i).print; println(" "+x(i)) } + } + val m = arr(0) + println(m) + foo(arr) + } |