特质Traversable
包含toList
,toMap
,ToSeq
等方法。鉴于List
,Map
,Seq
是Traversable
的子类,这会创建循环依赖,通常不是理想的设计模式。
我知道这是受限于集合库,它提供了一些很好的转换方法。
是否考虑过其他替代设计?例如“实用程序”类,或将转换方法添加到Predef
?
说我想添加一个新类:class RandomList extends List {...}
。为所有Traversable类提供一个方法toRandomList
会很高兴,但为此我需要使用Traversable中的隐式“pimp my library”?这似乎有点矫枉过正。使用实用程序类设计,我可以扩展该类(或Predef)以添加我的转换方法。这里推荐的设计是什么?
答案 0 :(得分:7)
另一种可扩展的方法是to[List]
,to[RandomList]
。
尽管如此,添加这个内容有点棘手。 https://gist.github.com/445874/2a4b0bb0bde29485fec1ad1a5bbf968df80f2905
答案 1 :(得分:6)
要添加toRandomClass
,您必须使用皮条客我的图书馆模式。但是,为什么你认为这有点矫枉过正?开销可以忽略不计。并且它不会扩展实用程序类 - 为什么Scala会查看该方法的新类?更不用说你必须实例化这样一个类才能访问它的方法。
答案 2 :(得分:5)
这里没有循环依赖。 当存在少量相互引用的独立组件时,会发生循环依赖。 Scala标准库是一个组件。由于它始终只需一步即可构建,因此没有任何问题。
答案 3 :(得分:3)
你是对的。我们从toString
类中移除String
...