1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
import scala.language.reflectiveCalls
class A {
override def equals(other: Any) = other match {
case _: this.type => true
case _ => false
}
}
object Dingus {
def IamDingus = 5
}
object Test {
val x1 = new A
val x2 = new A
val x3 = new { self =>
override def equals(other : Any) = other match {
case that: self.type => true
case _ => false
}
}
val x4 = new { self =>
def f(x: Any): Int = x match {
case _: x1.type => 1
case _: x2.type => 2
case _: x3.type => 3
case _: self.type => 4
case x: Dingus.type => x.IamDingus
}
}
def main(args: Array[String]): Unit = {
assert(x1 == x1)
assert(x1 != x2)
assert(x1 != ())
assert(x2 != x1)
assert(x3 == x3)
assert(x3 != x2)
assert(x2 != x3)
List(x1, x2, x3, x4, Dingus) map x4.f foreach println
}
}
|