gpt4 book ai didi

scala - 值(value)的存在量化

转载 作者:行者123 更新时间:2023-12-04 03:41:24 27 4
gpt4 key购买 nike

我在Scala语言中遇到了关于值的存在性量化
规范(3.2.10现有类型)。

x: y.Inner forSome{val y : Outer}

有人有说明性的用例吗?
T forSome {val x: S}定义为 T forSome { type t <: S with Singleton }。在规范(3.2.1单例类型)中提到了Singletron特性,但是我在Scaladoc中找不到它。它在哪里定义?

最佳答案

它与类型名称中提到的内部类一起使用非常有用。例如,参见A Tour of Scala: Inner Classes中定义的Graph和Node类。值上的现有量化用于写入某些未指定图的节点类型。

type SomeNode = g.Node forSome { val g: Graph }

如果您想拥有一个将两个节点作为必须来自同一图的参数的方法,这可能会很有用。
def somethingWithTwoNodes[N <: g.Node forSome { val g: Graph }](n1: N, n2: N) = (n1,n2)

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

那如果你有
val g1 = new Graph
val g2 = new Graph

然后这些编译
somethingWithTwoNodes(g1.newNode, g1.newNode)
somethingWithTwoNodes(g2.newNode, g2.newNode)

但是这些不
somethingWithTwoNodes(g1.newNode, g2.newNode)
somethingWithTwoNodes(g2.newNode, g1.newNode)

至于Singleton特质,它不是真的以典型方式定义的,即没有用于它的类文件。就像类型Any,AnyVal,AnyRef和Null。它与其他类型一起在 src/compiler/scala/tools/nsc/symtab/Definitions.scala中定义,但是我怀疑这是否是非常有用的信息。这也是一个奇怪的野兽,它是最终的特征,这意味着您不能在定义特征或类时将其混入其中,实际上,它更像是编译器将其归因于某种类型的标记,以表示该类型与任何其他类型都是唯一的。

关于scala - 值(value)的存在量化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2191142/

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