特征Traversable
具有诸如toList
,toMap
,ToSeq
的方法。鉴于List
,Map
,Seq
是Traversable
的子类,这会产生循环依赖性,这通常是不是所需的设计模式。Scala系列中的循环依赖关系
据我所知,这是限制在集合库,它提供了一些很好的转换方法。
有没有其他设计考虑?如“实用程序”类,或将转换方法添加到Predef
?
说我想添加一个新类:class RandomList extends List {...}
。如果有一个方法toRandomList
适用于所有Traversable类,那将是非常好的,但为此,我需要用“隐藏在Traversable”上的“pimp我的类库”。这似乎有点矫枉过正。通过实用工具类设计,我可以扩展该类(或Predef)以添加我的转换方法。这里推荐的设计是什么?
感谢@retronym和丹尼尔。但是,我主要是在回答问题的第一部分。循环依赖在默认情况下被接受为Scala库中的设计模式吗? – Adrian 2011-01-14 21:19:32
Adrian:是的。安德烈的回答是正确的。 – 2011-01-24 14:59:30
有一个关于Scala集合是一个独立模块的有效案例,因此被“允许”具有循环依赖关系。然而,它是一个大模块,并且它是积极开发的,因此更清洁的设计会很好。这与从外部进行函数式编程的方法有些类似,内部使用命令式编码(在私有方法中)。我的猜测是,避免循环依赖需要对类型进行抽象(即将类传递给类似于(T)的方法,而不是toList(),toMap()等),Scala不支持。 – Adrian 2011-01-26 06:14:11