gpt4 book ai didi

scala - 通过方法类型参数分配给类型成员的值打破了类型等价

转载 作者:行者123 更新时间:2023-12-05 09:10:06 26 4
gpt4 key购买 nike

为什么下面的类型等价成立

trait Foo { type T }
val fa = new Foo { type T = Int }

implicitly[fa.T =:= Int] // OK

但是当类型成员 T 通过方法参数 A 分配时,类型等价性不成立

def makeFoo[A]: Foo = new Foo { type T = A }
val fb = makeFoo[Int]

implicitly[fb.T =:= Int] // ERROR

凭直觉我会期望如果 T = AA = Int 那么 T = Int?

最佳答案

这是因为 makeFoo 的返回类型只是 Foo 而不是 Foo { type T = A }。如果您没有显式声明它或者如果您优化它,错误就会消失。

def makeFoo[A] = new Foo { type T = A }
val fb = makeFoo[Int]

implicitly[fb.T =:= Int] // No more error

or

def makeFoo2[A]: Foo { type T = A } = new Foo { type T = A }
val fc: Foo { type T = Int } = makeFoo[Int]

implicitly[fc.T =:= Int] // No more error

Scastie :

<script src="https://scastie.scala-lang.org/knIfPcXqSQKXXCXJ2teHkg.js"></script>

关于scala - 通过方法类型参数分配给类型成员的值打破了类型等价,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61858945/

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