Scala类型类,用于获取类型成员的最具体类型
发布时间:2020-12-16 19:24:00 所属栏目:安全 来源:网络整理
导读:请考虑以下 Scala代码: trait Elemclass MyElem extends Elemtrait Holder { type EP : Elem def get: EP}class MyHolder(e: MyElem) extends Holder { type EP = MyElem def get = e} 根据我是否有对象类型的Holder或MyHolder,调用get可以分别返回Elem或My
请考虑以下
Scala代码:
trait Elem class MyElem extends Elem trait Holder { type EP <: Elem def get: EP } class MyHolder(e: MyElem) extends Holder { type EP = MyElem def get = e } 根据我是否有对象类型的Holder或MyHolder,调用get可以分别返回Elem或MyElem.我试图在类型级别提供该信息,但我没有得到任何结果.例如,考虑一个像这样的Getter类型: trait Getter[From] { type Out def get(from: From): Out } object Getter { type Aux[From,Out0] = Getter[From] { type Out = Out0 } def apply[From](implicit getter: Getter[From]): Getter.Aux[From,getter.Out] = getter // some way to create a `Getter[H <: Holder]` // where `Out` is the most specific type known for `H#EC` } Getter[MyHolder] // should return a MyHolder { type Out = MyElem } Getter[Holder] // should return a Holder { type Out = Elem } 我正在尝试为片段中的Getter [H<:Holder]创建隐式构造函数,但即使我尝试了几种约束类型的方法,我也没有得到任何适用于上述两个示例的结果. 这可能与Scala编译器有关吗?从无形或scalaz的任何类型类帮助我做到这一点? 解决方法
你问的问题听起来像
Path Dependent Types的应用
其中,您可以根据某些特征/类中定义的类型键入内容,而无需了解具体实现: val x: Holder#EP = ??? 我希望这就是你要找的东西,如果不是我害怕我不完全理解你的问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |