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