Scala 语言规范指定的语法存在主义类型 https://scala-lang.org/files/archive/spec/2.13/03-types.html#existential-types as
Type ::= InfixType ExistentialClauses
ExistentialClauses ::= ‘forSome’ ‘{’ ExistentialDcl
{semi ExistentialDcl} ‘}’
ExistentialDcl ::= ‘type’ TypeDcl
| ‘val’ ValDcl
我见过很多代码使用forSome
and type
一起,例如
List[T] forSome { type T; }
但我从未见过forSome
with val
,有样品吗?
如果您考虑一下,您很快就会意识到类型中出现的唯一时间值是路径相关类型。举例来说:
trait Trait {
val x: { type T }
val y: x.T // path dependent type: here comes our val
}
将其应用于存在类型,我们现在可以轻松地制作一个的样本forSome { val
:
type SomeList = List[v.T] forSome { val v : { type T }; }
上述类型表示其元素属于路径相关类型的任何列表v.T
.
举例来说:
object X {
type T = String
val x: T = "hello"
}
val l1: SomeList = List(X.x) // compiles fine
val l2: SomeList = List(123) // does not compile
的确,SomeList
照原样来说是毫无用处的。通常,这样的存在类型只有作为更大类型的一部分才真正有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)