为什么Scala中具有不同组件顺序的复合类型是等效的?
根据
Scala Language Specification,
但是,给定 trait A { val a: Int } trait B { val b: String } 我越来越 scala> implicitly[A with B =:= B with A] res0: =:=[A with B,B with A] = <function1> 即使组件的顺序不同,它们也被认为是等效的.为什么? 解决方法
我认为=:=证据只断言每个都是另一个的上限.
trait A; trait B import scala.reflect.runtime.{universe => ru} val ab = ru.typeOf[A with B] val ba = ru.typeOf[B with A] ab =:= ba // false! ab <:< ba // true! ba <:< ab // true! 如果LUB(X,Y)== X == Y,则从Predef隐式得到,因为隐式分辨率找到具有推断上限的=:=.tpEquals. 这很可能是你想要的,因为它意味着你可以将一种类型视为另一种类型,这是有效的,因为A的成员与B的成员相等,即使实现中的特征线性化不同. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |