blob: 43f008b5f4483d140a87dcfe99887f0695eb21e0 (
plain) (
blame)
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
|
case class Record(elems: (String, Any)*)
object Record {
implicit def projector: Projector[Record] = new Projector[Record] {
def get(receiver: Record, name: String): Any =
receiver.elems.find(_._1 == name).get._2
}
}
object Test {
import scala.reflect.Projector.reflectiveProjector
import Record.projector
def f(closeable: { def close(): Unit }) =
closeable.close()
type RN = Record { val name: String }
def g(r: RN) = r.name
val rr: RN = Record("name" -> "Bob", "age" -> 42).asInstanceOf[RN]
def main(args: Array[String]): Unit = {
f(new java.io.PrintStream("foo"))
assert(g(rr) == "Bob")
val s: { def concat(s: String): String } = "abc"
assert(s.concat("def") == "abcdef")
}
}
|