gpt4 book ai didi

scala - 在 Scala 中,构造函数如何引用它正在创建的对象?

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

我想在 Scala 中实现一个基于原型(prototype)的系统。类型层次结构的根节点是 ROOT 节点,它有一个引用自身的原型(prototype)。

以下代码演示了我正在尝试做的事情:

class Node(val prototype: Node) {
private def this() = this(this)
}

object Node {
val ROOT = new Node
}

不幸的是,这不会编译错误:“this can only be used in a class, object, or template”。

不接受用于调用主构造函数的参数“this”。这听起来很合理,因为该对象尚未创建。但是,由于原型(prototype)是不可变的,我不能将其设置为 null 并在之后定义它。

关于如何在 Scala 中正确执行此操作的任何建议?

我正在使用 Scala-2.8.0RC7。

最佳答案

对于这看起来你有两种东西(根节点和简单节点)这个呢?

trait Node { def prototype: Node }

class RootNode extends Node { def prototype = this }

class SimpleNode(val prototype: Node) extends Node

在 REPL 中你可以这样做:

scala> val rootNode = new RootNode
rootNode: RootNode = RootNode@191dd1d

scala> val n1 = new SimpleNode(rootNode)
n1: SimpleNode = SimpleNode@30e4a7

scala> val n2 = new SimpleNode(n1)
n2: SimpleNode = SimpleNode@3a0589

scala> n2.prototype.prototype
res0: Node = RootNode@191dd1d

我不知道,如果这就是你要找的。

关于scala - 在 Scala 中,构造函数如何引用它正在创建的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3157436/

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