Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala集合中的循环依赖_Scala_Scala Collections_Circular Dependency - Fatal编程技术网

Scala集合中的循环依赖

Scala集合中的循环依赖,scala,scala-collections,circular-dependency,Scala,Scala Collections,Circular Dependency,TraitTraversable具有诸如toList、toMap、ToSeq等方法。鉴于List,Map,Seq是可遍历的的子类,这就产生了循环依赖,这通常不是一种理想的设计模式 我知道这是受限于集合库的,它提供了一些很好的转换方法 是否考虑过其他设计方案?例如“实用程序”类,或将转换方法添加到Predef 假设我想添加一个新类:classrandomlist扩展列表{…}。如果能为所有可遍历类提供一个方法toRandomList,那就太好了,但为此,我需要使用隐式的on-Traversable

Trait
Traversable
具有诸如
toList
toMap
ToSeq
等方法。鉴于
List
Map
Seq
可遍历的
的子类,这就产生了循环依赖,这通常不是一种理想的设计模式

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

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


假设我想添加一个新类:
classrandomlist扩展列表{…}
。如果能为所有可遍历类提供一个方法
toRandomList
,那就太好了,但为此,我需要使用隐式的on-Traversable?这似乎有点过分了。使用实用程序类设计,我可以扩展该类(或Predef)来添加转换方法。这里推荐的设计是什么?

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


不过,要用隐式的方式添加它有点棘手

要添加
toRandomClass
,您实际上必须求助于皮条客我的库模式。然而,你为什么认为这是过分的?开销可以忽略不计。扩展一个实用程序类是行不通的——为什么Scala会在新类中寻找该方法?更不用说你必须实例化这样一个类才能访问它的方法。

这里没有循环依赖关系。 循环依赖是指当有几个相互引用的独立组件时发生的情况。
Scala标准库是一个组件。因为它总是一步到位,所以没有问题。

你说得对。让我们从
String
类中删除
toString

希望在Scala 2.9中实现这一点?谢谢@retronym和Daniel。不过,我主要是想回答问题的第一部分。循环依赖在Scala库中被默认为一种设计模式吗?阿德里安:是的。Andrey的回答是正确的。Scala集合是一个自包含的模块,因此“允许”具有循环依赖关系,这是一个有效的例子。然而,它是一个大模块,并且正在积极开发,因此一个更干净的设计会更好。这有点类似于从外部进行函数式编程的方法,在内部使用命令式代码(在私有方法中)。我猜想,避免循环依赖将需要对类型进行抽象(即将类传递给类似于(t)的方法,而不是Telist-(),ToMax()等),而斯卡拉不支持(S.)。循环依赖性可以表现在组件之间的任何级别的边界中。你基本上是在抹去问题,把它变成不感兴趣的东西的“内部细节”。他问的正是这个内部细节:——)