gpt4 book ai didi

scala - 为什么具有不同组件顺序的复合类型在 Scala 中是等效的?

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

根据Scala Language Specification ,

Two compound types are equivalent if the sequences of their component are pairwise equivalent, and occur in the same order, and their refinements are equivalent. Two refinements are equivalent if they bind the same names and the modifiers, types and bounds of every declared entity are equivalent in both refinements.



然而,鉴于
trait A { val a: Int }
trait B { val b: String }

我越来越
scala> implicitly[A with B =:= B with A]
res0: =:=[A with B,B with A] = <function1>

即它们被认为是等效的,即使组件的顺序不同。为什么?

最佳答案

我认为=:=证据只是断言每个都是另一个的上限。

trait A; trait B

import scala.reflect.runtime.{universe => ru}

val ab = ru.typeOf[A with B]
val ba = ru.typeOf[B with A]
ab =:= ba // false!
ab <:< ba // true!
ba <:< ab // true!

如果 LUB(X, Y) == X == Y,则基本上从 Predef 得到的隐式解析,因为然后隐式解析找到 =:=.tpEquals与推断的上限。

这很可能是您想要的,因为这意味着您可以将一种类型视为另一种类型,而这是有效的,因为 A with B 的成员。等于 B with A的成员即使实现中的特征线性化不同。

关于scala - 为什么具有不同组件顺序的复合类型在 Scala 中是等效的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32068620/

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