我正在使用Scala类型系统实现一些表达式。要确定if-then-else
表达式的类型,我需要能够实现以下函数
def leastUpperBound(thenPartType: Type, elsePartType: Type): Type
scala.reflect._
中的某个地方是否有执行评估的功能?或者我是否必须使用那些*TypeApi
提取器实现搜索?
提前致谢
答案 0 :(得分:4)
是的,universe
只有一个方法lub
:
import reflect.runtime.universe._
def leastUpperBound(thenPartType: Type, elsePartType: Type): Type =
lub(List(thenPartType, elsePartType))
使用它:
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