Scala:解决"非法循环引用"

Pau*_*nov 6 tree types scala

我正在尝试实现一个基于HashMap的树,该树支持给定根密钥的O(1)子树查找.为了达到这个目标,我正在努力做到以下几点:

scala> type Q = HashMap[Char, Q]
<console>:6: error: illegal cyclic reference involving type Q
       type Q = HashMap[Char, Q]
                          ^
Run Code Online (Sandbox Code Playgroud)

所以问题是,有没有办法让我做一些这样的事情而不诉诸丑陋HashMap[Char, Any]的随后的价值观HashMap[Char, Any]

现在,我也看到我可以使用类似下面的内容来避免循环引用错误,它甚至可能更干净 - 但是找到如何正确地执行它的第一种方式很好,只是为了教育价值.

import collections.mutable.HashMap

class LTree {
  val children = new HashMap[Char, LTree]
}
Run Code Online (Sandbox Code Playgroud)

谢谢一堆.

Art*_*mGr 16

我可能没有"得到"这个问题,但是怎么样

class L {
  type Q = java.util.HashMap[Char, this.type]
}
Run Code Online (Sandbox Code Playgroud)

要么

class Q extends java.util.HashMap[Char, Q]
Run Code Online (Sandbox Code Playgroud)

  • 你能解释一下第一个吗? (2认同)