Scala语言规范将Existential Types的语法指定为
Type ::= InfixType ExistentialClauses
ExistentialClauses ::= ‘forSome’ ‘{’ ExistentialDcl
{semi ExistentialDcl} ‘}’
ExistentialDcl ::= ‘type’ TypeDcl
| ‘val’ ValDcl
我已经看到很多代码一起使用
forSome
和type
,例如List[T] forSome { type T; }
但是我从未见过
forSome
和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
几乎没有用。通常,这样的存在类型仅作为更大类型的一部分才真正有用。关于scala - forSome {val`?的样本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22741372/