Scala集合中的循环依赖项

时间:2011-01-14 18:38:18

标签: scala scala-collections circular-dependency

特质Traversable包含toListtoMapToSeq等方法。鉴于ListMapSeqTraversable的子类,这会创建循环依赖,通常不是理想的设计模式。

我知道这是受限于集合库,它提供了一些很好的转换方法。

是否考虑过其他替代设计?例如“实用程序”类,或将转换方法添加到Predef

说我想添加一个新类:class RandomList extends List {...}。为所有Traversable类提供一个方法toRandomList会很高兴,但为此我需要使用Traversable中的隐式“pimp my library”?这似乎有点矫枉过正。使用实用程序类设计,我可以扩展该类(或Predef)以添加我的转换方法。这里推荐的设计是什么?

4 个答案:

答案 0 :(得分:7)

另一种可扩展的方法是to[List]to[RandomList]

尽管如此,添加这个内容有点棘手。 https://gist.github.com/445874/2a4b0bb0bde29485fec1ad1a5bbf968df80f2905

答案 1 :(得分:6)

要添加toRandomClass,您必须使用皮条客我的图书馆模式。但是,为什么你认为这有点矫枉过正?开销可以忽略不计。并且它不会扩展实用程序类 - 为什么Scala会查看该方法的新类?更不用说你必须实例化这样一个类才能访问它的方法。

答案 2 :(得分:5)

这里没有循环依赖。 当存在少量相互引用的独立组件时,会发生循环依赖。 Scala标准库是一个组件。由于它始终只需一步即可构建,因此没有任何问题。

答案 3 :(得分:3)

你是对的。我们从toString类中移除String ...