首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >价值上的存在量化

价值上的存在量化
EN

Stack Overflow用户
提问于 2010-02-03 18:14:22
回答 2查看 942关注 0票数 10

我在Scala语言规范(3.2.10存在类型)中遇到了对值的存在量化。

代码语言:javascript
复制
x: y.Inner forSome{val y : Outer}

有人对它有说明性的用例吗?

T forSome {val x: S}被定义为T forSome { type t <: S with Singleton }。在规范(3.2.1 Singleton类型)中提到了Singletron特征,但我在Scaladoc中找不到它。它在哪里定义的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-04 11:31:19

它与类型名称中提到的内部类一起很有用。例如,请参阅A Tour of Scala: Inner Classes中定义的图形和节点类。值上的存在量词用于写入某个未指定图的节点类型。

代码语言:javascript
复制
type SomeNode = g.Node forSome { val g: Graph }

如果您希望有一个方法将两个节点作为参数,而这两个节点必须来自同一个图,那么这可能会很有用。

代码语言:javascript
复制
def somethingWithTwoNodes[N <: g.Node forSome { val g: Graph }](n1: N, n2: N) = (n1,n2)

请注意,2.7不会接受该方法定义,因为它认为N中存在某种递归。

然后,如果你有

代码语言:javascript
复制
val g1 = new Graph
val g2 = new Graph

然后编译这些代码

代码语言:javascript
复制
somethingWithTwoNodes(g1.newNode, g1.newNode)
somethingWithTwoNodes(g2.newNode, g2.newNode)

但这些都不是

代码语言:javascript
复制
somethingWithTwoNodes(g1.newNode, g2.newNode)
somethingWithTwoNodes(g2.newNode, g1.newNode)

至于Singleton特征,它并不是以典型的方式定义的,也就是说,没有用于它的类文件。它类似于Any、AnyVal、AnyRef和Null类型。它是在src/compiler/scala/tools/nsc/symtab/Definitions.scala中和其他类型一起定义的,但我怀疑这些信息是否有用。它也是一个奇怪的怪兽,它是一个最终的特征,这意味着当你定义一个特征或类时,你不能把它混入其中,它实际上更多地是编译器赋予一个类型的一个标记,以表明它与任何其他类型是唯一的。

票数 13
EN

Stack Overflow用户

发布于 2010-02-05 01:14:40

this paper的前半部分使用了这种技术来构建流类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2191142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档