gpt4 book ai didi

scala - 如何从投影类型推断正确的类型参数?

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

我在让 Scala 从类型投影中推断出正确的类型时遇到了一些麻烦。

考虑以下:

trait Foo {
type X
}

trait Bar extends Foo {
type X = String
}

def baz[F <: Foo](x: F#X): Unit = ???

然后以下编译正常:
val x: Foo#X = ???    
baz(x)

但以下不会编译:
val x: Bar#X = ???    
baz(x)

Scala 看到 x 的“底层类型字符串” ,但是丢失了 x的信息是 Bar#X .如果我注释类型它工作正常:
baz[Bar](x)

有没有办法让 Scala 为 baz 推断正确的类型参数?
如果不是,那么使之成为不可能的一般答案是什么?

最佳答案

程序通过在上下文中添加这个隐式转换来编译:

implicit def f(x: Bar#X): Foo#X = x

由于此隐式转换适用于任何 F <: Foo ,我想知道为什么编译器自己不这样做。

关于scala - 如何从投影类型推断正确的类型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14721127/

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