File tree 4 files changed +54
-0
lines changed
4 files changed +54
-0
lines changed Original file line number Diff line number Diff line change
1
+ package examples .select
2
+
3
+ import scala .language .dynamics
4
+ import scala .quoted .*
5
+
6
+ case class Wrapper [A ](inner : A ) extends Dynamic :
7
+ transparent inline def selectDynamic (inline name : String ) =
8
+ $ {selectDynamicImpl(' inner , ' name )}
9
+
10
+ def selectDynamicImpl [A : Type ](inner : Expr [A ], name : Expr [String ])(using quotes : Quotes ): Expr [Any ] =
11
+ import quotes .reflect .*
12
+ Select .unique(inner.asTerm, name.valueOrAbort).asExpr
Original file line number Diff line number Diff line change
1
+ package examples .select
2
+
3
+
4
+ import scala .language .dynamics
5
+ import examples .select .Wrapper
6
+
7
+ object Dynamic0 :
8
+
9
+ @ main
10
+ def runTimeError =
11
+
12
+ val w = Wrapper (Option (1 ))
13
+ println(w.isEmpty)
14
+
15
+ end Dynamic0
Original file line number Diff line number Diff line change
1
+ package examples .select
2
+
3
+ import scala .language .dynamics
4
+ import scala .quoted .*
5
+
6
+ case class Wrapper [A ](inner : A ) extends Dynamic :
7
+ transparent inline def selectDynamic (inline name : String ) =
8
+ $ {selectDynamicImpl(' inner , ' name )}
9
+
10
+ def selectDynamicImpl [A : Type ](inner : Expr [A ], name : Expr [String ])(using quotes : Quotes ): Expr [Any ] =
11
+ import quotes .reflect .*
12
+ Select .unique(inner.asTerm, name.valueOrAbort).asExpr
Original file line number Diff line number Diff line change
1
+ package examples .select
2
+
3
+
4
+ import scala .language .dynamics
5
+ import examples .select .Wrapper
6
+
7
+ object Dynamic0 :
8
+
9
+ @ main
10
+ def runTimeError =
11
+
12
+ val w = Wrapper (Option (1 ))
13
+ println(w.isEmpty)
14
+
15
+ end Dynamic0
You can’t perform that action at this time.
0 commit comments