gpt4 book ai didi

具有路径依赖/嵌套类型的 Scala 类型删除问题

转载 作者:行者123 更新时间:2023-12-03 17:42:27 25 4
gpt4 key购买 nike

让我们假设以下情况:

class Wrapper1 {
case class Condition(test: String)
}
object Wrapper1 extends Wrapper1

class Wrapper2 {
case class Condition[A](test: String)
}
object Wrapper2 extends Wrapper2


class Test
type T = // whatever

def test(fn: T => Wrapper1.Condition): X
def test[R](fn: T => Wrapper2.Condition[R]): X
}

问题在于,由于类型删除,这些方法在删除后具有完全相同的类型。很容易改变第二个的签名,说:
def test[R](fn: T => Wrapper2.Condition[R])(implicit ev: R =:= R): X

但这会混淆编译器并使用 test其他地方的方法是不可能的。出于多种设计原因,我试图保持此方法的名称一致。有没有办法成功做到这一点?

最佳答案

似乎这不是 Scala double definition (2 methods have the same type erasure) 的副本

我的建议......只有一个方法

def test[Cond: TypeTag](fn: T => Cond): X = {
if(typeOf[T] <:< typeOf[Wrapper1.Condition]) ...
else if(typeOf[T] <:< typeOf[Wrapper2.Condition[_]) ...
else ...
}

关于具有路径依赖/嵌套类型的 Scala 类型删除问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32885507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com