加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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 = ???

我希望这就是你要找的东西,如果不是我害怕我不完全理解你的问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读