Ars*_*lev 0 reflection types scala
我正在使用 Scala 类型系统实现一些表达式。为了确定表达式的类型,if-then-else我需要能够实现以下函数
def leastUpperBound(thenPartType: Type, elsePartType: Type): Type
Run Code Online (Sandbox Code Playgroud)
是否有某个函数scala.reflect._可以执行评估?或者我是否必须使用这些提取器来实现搜索*TypeApi?
提前致谢
是的,有一个专门用于此目的的universe方法:lub
import reflect.runtime.universe._
def leastUpperBound(thenPartType: Type, elsePartType: Type): Type =
lub(List(thenPartType, elsePartType))
Run Code Online (Sandbox Code Playgroud)
使用它:
trait Base
class A extends Base
class B extends Base
scala> com.Main.leastUpperBound(typeOf[A], typeOf[B])
res0: reflect.runtime.universe.Type = Base
scala> com.Main.leastUpperBound(typeOf[A], typeOf[String])
res1: reflect.runtime.universe.Type = java.lang.Object
scala> com.Main.leastUpperBound(typeOf[A], typeOf[Int])
res1: reflect.runtime.universe.Type = Any
Run Code Online (Sandbox Code Playgroud)