gpt4 book ai didi

scala - 结构类型细化和类型相等

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

我偶然发现了 Type.=:= 令人费解的行为当应用于类型改进时。
考虑:

import reflect.runtime.universe._
type T1 = AnyRef {
def apply( name: String ): Unit
def foo: String
}

type Base = { def apply( name: String ): Unit }
type T2 = Base {
def foo: String
}

鉴于 Base是类型细化的别名,我希望通过添加成员 foo 进一步细化它将
产生与我定义的相同的类型 foo就在 Base .

或者换句话说,我希望 T1T2表示完全等效的类型。

在大多数情况下,scalac 似乎同意。
例如,我可以传递 T2 的实例其中 T1 的实例是期待:
def f( x: T1 ){}
f( null: T2 ) // scalac does not complain here

反过来说:
def g( x: T2 ){}
g( null: T1 ) // scalac is still happy

我也可以要求证据 T1 =:= T2它也编译得很好:
implicitly[T1 =:= T2]

然而 ,使用 Scala 反射我得到完全不同的结果:
scala> typeOf[T1] =:= typeOf[T2]
res2: Boolean = false

那么这是一个scala反射错误(我猜是这样)还是有一个根本原因(技术或其他)为什么 typeOf[T1] =:= typeOf[T2]会返回假吗?

最佳答案

可悲的是,它看起来是这个错误:https://issues.scala-lang.org/browse/SI-8177

从好的方面来说......看起来正在积极进行修复工作:)

关于scala - 结构类型细化和类型相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21629681/

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