【发布时间】:2020-11-15 09:51:54
【问题描述】:
我正在尝试解析在以下代码中创建的参数类型 type _1 >: Char with Int <: AnyVal 的含义(使用 Scala ammonite repl)。我正在定义一个数组数组
-
with在这种情况下是什么意思,我们是否定义了一个具有 Int 'traits' 的新 Char 类? - 表达式
>: Char with Int <: AnyVal是否意味着 - 任何类型 (_1) 是 Char 的超类型和 Int 但 AnyVal 的子类型?
@ val tmix1 = Array(Array[Int](1,2,3), Array[Char]('b','f'))
tmix1: Array[Array[_1] forSome { type _1 >: Char with Int <: AnyVal }]
= Array(Array(1, 2, 3), Array('b', 'f'))
【问题讨论】:
-
你有一个整数数组和另一个字符数组,如果你创建一个包含两者的数组,你最终会得到一个数组数组,它要么是字符,要么是整数。所以,一些无用的东西。如果您正在学习语言理解类型将是第一步(顺便说一句,除非您需要数组,否则请远离数组,使用列表或任何其他真正的集合)
-
谢谢,是的,这是一个玩具示例,试图弄清楚 (type _1 ) 是如何创建的
-
被称为存在类型。所以它说它是某个类型
X的Array[Array[X]],它既是Char with Int的超类型,也是AnyVal的子类型。 -
请注意,需要
forSome语法的存在类型将在 Scala 3 中删除。只留下可以使用_语法(通配符类型)编写的存在类型。
标签: arrays scala types existential-type