File tree Expand file tree Collapse file tree 7 files changed +110
-1
lines changed Expand file tree Collapse file tree 7 files changed +110
-1
lines changed Original file line number Diff line number Diff line change
1
+ import scala .language .dynamics
2
+
3
+ class DynamicTest extends Dynamic {
4
+ def selectDynamic (name : String ) = s " value of $name"
5
+ def updateDynamic (name : String )(value : Any ) {
6
+ println(s " You have just updated property ' $name' with value: $value" )
7
+ }
8
+ }
9
+
10
+ object MyApp extends App {
11
+ def testing () {
12
+ val test = new DynamicTest
13
+ test.firstName = " John"
14
+ }
15
+
16
+ testing()
17
+ }
Original file line number Diff line number Diff line change 1
- import language .dynamics
1
+ import scala . language .dynamics
2
2
3
3
object Test {
4
4
def main (args : Array [String ]) {
Original file line number Diff line number Diff line change
1
+ import scala .language .dynamics
2
+
3
+ class Dyn extends Dynamic {
4
+ def selectDynamic (s : String ): Dyn = new Dyn
5
+ def get [T ]: T = null .asInstanceOf [T ]
6
+ }
7
+
8
+ object Foo {
9
+ val dyn = new Dyn
10
+ dyn.foo.bar.baz.get[String ]
11
+ }
Original file line number Diff line number Diff line change
1
+ Running ABTest asserts
2
+ Done
Original file line number Diff line number Diff line change
1
+ import scala .language .dynamics
2
+
3
+ object A extends Dynamic {
4
+ var a = " a"
5
+
6
+ def selectDynamic (method: String ): String = a
7
+
8
+ def updateDynamic (method: String )(v: String ) { a = v }
9
+ }
10
+
11
+ class B extends Dynamic {
12
+ var b = " b"
13
+
14
+ def selectDynamic (method: String ): String = b
15
+
16
+ def updateDynamic (method: String )(v: String ) { b = v }
17
+ }
18
+
19
+ object Test extends App {
20
+ assert( A .foo == " a" )
21
+ assert( A .bar == " a" )
22
+ A .aaa = " aaa"
23
+ assert( A .bar == " aaa" )
24
+
25
+ val b = new B
26
+ assert( b.foo == " b" )
27
+ assert( b.bar == " b" )
28
+ b.bbb = " bbb"
29
+ assert( b.bar == " bbb" )
30
+
31
+ {
32
+ println(" Running ABTest asserts" )
33
+ A .a = " a"
34
+ (new ABTest ).test()
35
+ }
36
+
37
+ println(" Done" )
38
+ }
39
+
40
+ class ABTest {
41
+ def test () {
42
+ assert( A .foo == " a" )
43
+ assert( A .bar == " a" )
44
+ A .aaa = " aaa"
45
+ assert( A .bar == " aaa" )
46
+
47
+ val b = new B
48
+ assert( b.foo == " b" )
49
+ assert( b.bar == " b" )
50
+ b.bbb = " bbb"
51
+ assert( b.bar == " bbb" )
52
+ }
53
+ }
Original file line number Diff line number Diff line change
1
+ Type in expressions to have them evaluated.
2
+ Type :help for more information.
3
+
4
+ scala>
5
+
6
+ scala> import scala.language.dynamics
7
+ import scala.language.dynamics
8
+
9
+ scala> class Dyn(m: Map[String, Any]) extends Dynamic { def selectDynamic[T](s: String): T = m(s).asInstanceOf[T] }
10
+ defined class Dyn
11
+
12
+ scala> new Dyn(Map("foo" -> 10)).foo[Int]
13
+ res0: Int = 10
14
+
15
+ scala>
16
+
17
+ scala>
Original file line number Diff line number Diff line change
1
+ import scala .tools .partest .ReplTest
2
+
3
+ object Test extends ReplTest {
4
+ def code = """
5
+ import scala.language.dynamics
6
+ class Dyn(m: Map[String, Any]) extends Dynamic { def selectDynamic[T](s: String): T = m(s).asInstanceOf[T] }
7
+ new Dyn(Map("foo" -> 10)).foo[Int]
8
+ """
9
+ }
You can’t perform that action at this time.
0 commit comments