blob: ab5a8b1d66126a63b3918feb2ef3f97f8c9c8027 (
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
import scala.reflect._
class Car{ override def toString = "I am a car" }
object x{
def nullary = "nullary"
def noargs() = "noargs"
def - = "symbolic"
def $(s:String) = "symbolic with args"
val value = "value"
def overloaded(i:Int) = "overloaded with primitive"
def overloaded(s:String) = s
def default( a:Int, b:Int = 2 ) = "default: "+(a+b)
def named( a:Int, b:Int, c:Int ) = "named: "+(a+b+c)
def typeArgs[T]( v:T ) = "typeArgs: "+v
var mutable = "before mutation"
def multiArgLists( a:String )( b:String ) = "multiArgList " + a + b
def bar( s:String )(implicit car:Car) = s + car.toString
}
object Test extends App{
val d = new DynamicProxy{ val dynamicProxyTarget = x }
println( d.noargs )
println( d.noargs() )
println( d.nullary )
println( d.value )
println( d.- )
println( d.$("x") )
try{
println( d.test )
} catch {
case _ => println("non-existent method")
}
println( d.mutable )
println("mutation 1")
d.mutable_=("after mutation 1")
println( d.mutable )
println("mutation 2")
d.mutable = "after mutation 2"
println( d.mutable )
println( d.overloaded("overloaded with object") )
println( d.overloaded(1) )
// test some non-constant arguments
def s = "overloaded with object in var"
println( d.overloaded(s) )
println( d.overloaded(s + " 2") )
val car = new Car
println( d.typeArgs(car) ) // inferred
// println( d.typeArgs[Car](car) ) // explicit not working (yet)
println( d.default( 1,3 ) )
println( d.default( 1 ) )
println( d.named(1,c=3,b=2) ) // applyDynamicNamed seems to be broken
// println( d.multiArgLists("a")("b") ) // not working yet
/*
// may never work
// testing implicit parameters (first test works when moving x into TestDynamicReflect)
implicit val car2 = new Car
println( d.bar( "Yeah, ") ); // FAILS: could not find implicit value for parameter car
{println( d.bar( "Yeah, ") )} // FAILS: could not find implicit value for parameter car
*/
}
|