gpt4 book ai didi

scala - 如何使用抽象类型的类型约束

转载 作者:行者123 更新时间:2023-12-04 14:12:28 25 4
gpt4 key购买 nike

鉴于以下代码:

trait S { type T }
case class A(t: Seq[String]) extends S { type T = Seq[String] }

我不明白这个编译错误:
似乎没有使用证据。
def f[S<:A, X](g: => Seq[X])(implicit ev: S#T =:= Seq[X]) = new A(g)

<console>:50: error: type mismatch;
found : Seq[X]
required: Seq[String]
def f[S<:A, X](g: => Seq[X])(implicit ev: S#T =:= Seq[X]) = new A(g)

最佳答案

对于它看起来有多傻,交换 =:= 的顺序操作数解决问题

def f[S<:A, X](g: => Seq[X])(implicit ev: Seq[X] =:= S#T) = new A(g)

谢谢你,斯卡拉克。

解释

当你说 implicit ev S#T =:= Seq[X] ,编译器提供了从 S#T 的隐式转换至 Seq[X] .但是,它不提供来自 Seq[X] 的等效转换。至 S#T ,这就是愚蠢的部分:平等不应该是可交换的吗?

这里有一些关于这个主题的额外细节: http://typelevel.org/blog/2014/07/02/type_equality_to_leibniz.html

关于scala - 如何使用抽象类型的类型约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26296022/

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