scala - 正确指定路径依赖类型注释

标签 scala path-dependent-type

我正在研究路径相关类型,并对类型推断无法帮助我的简单情况感到困惑,并且我不知道应该如何手动指定类型

final class Dependency[A]() {
  final case class Box protected[Dependency] (data : A)
  def box(data : A) : Box = Box(data)
  def unbox(box : Box) : A = box.data
}

def correct() {
  val dep = new Dependency[Int]
  val u = dep.box(0)
  val v = dep.unbox(u)
}

object InCorrect {
  def wrap(src : Int) = { // what return type should be here?
    val dep = new Dependency[Int]
    val box = dep.box(src)
    (dep, box)
  }
  def unwrap() {
    val (dep,box) = wrap(0)
    val v = dep.unbox(box) //type mismatch found
  }
}

我只是将一个函数分成两个,类型信息在两次调用之间的某个地方丢失了。我怎样才能重新建立它?

最佳答案

关于返回类型:

def wrap(src: Int): (Dependency[Int], Dependency[Int]#Box) = {
  val dep = new Dependency[Int]
  val box = dep.box(src)
  (dep, box)
}

至于从元组中获取值:

def unwrap() = {
  val x = wrap(20)

  val (dep, _) = x
  val (_, box: dep.Box) = x

  val v = dep.unbox(box)
  v
}

因此,此解决方法提取第一个值,并在类型归属中使用其类型来获取第二个值。

关于scala - 正确指定路径依赖类型注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22990993/

相关文章:

scala - 如何检查Map中是否存在键值对组合

oop - Scala 类型类的多态性

scala - 取决于参数类型的返回类型(例如 Await.ready())不能按预期工作

scala - 类型与类型投影不匹配

Scala:两种方法,不同的参数类型但相同的代码:如何统一?

java.lang.NoClassDefFoundError : org/apache/logging/log4j/Logger 错误

scala - 路径依赖类型和依赖类型有什么区别?

scala - 依赖于路径的类型 - 以下代码有什么问题?

session - 我的 SessionVar 对象应该在哪里?

scala - 从模式匹配中返回依赖于路径的类型