Scala集合中的循环依赖
TraitScala集合中的循环依赖,scala,scala-collections,circular-dependency,Scala,Scala Collections,Circular Dependency,TraitTraversable具有诸如toList、toMap、ToSeq等方法。鉴于List,Map,Seq是可遍历的的子类,这就产生了循环依赖,这通常不是一种理想的设计模式 我知道这是受限于集合库的,它提供了一些很好的转换方法 是否考虑过其他设计方案?例如“实用程序”类,或将转换方法添加到Predef 假设我想添加一个新类:classrandomlist扩展列表{…}。如果能为所有可遍历类提供一个方法toRandomList,那就太好了,但为此,我需要使用隐式的on-Traversable
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.)。循环依赖性可以表现在组件之间的任何级别的边界中。你基本上是在抹去问题,把它变成不感兴趣的东西的“内部细节”。他问的正是这个内部细节:——)