Scala集合类型之间的隐式转换

ebr*_*hez 5 xml scala dom4j

我想在Scala XML Elem对象和XML元素的另一种表示之间隐式转换,在我的例子中是dom4j Element.我写了以下隐式转换:

implicit def elemToElement(e: Elem): Element = ... do conversion here ...
implicit def elementToElem(e: Element): Elem = ... do conversion here ...
Run Code Online (Sandbox Code Playgroud)

到目前为止,这很好,这是有效的.

现在我还需要所有元素的集合来转换两种方式.首先,我是否绝对需要编写其他转换方法?如果我没有,事情似乎没有用.

我试着写下面的内容:

implicit def elemTToElementT(t: Traversable[Elem]) = t map (elemToElement(_))
implicit def elementTToElemT(t: Traversable[Element]) = t map (elementToElem(_))
Run Code Online (Sandbox Code Playgroud)

这看起来并不太理想,因为如果转换方法采用Traversable,那么它也会返回Traversable.如果我传递一个List,我也会得到一个Traversable.所以我假设转换应该以某种方式进行参数化.

那么,为了尽可能通用,编写这些转换的标准方法是什么?

sbl*_*ndy 1

我认为这可能太过于隐含了。特别是当您可以在地图中使用转换器方法时

val listOfElements = listOfElems map elemToElement(_)
Run Code Online (Sandbox Code Playgroud)

我认为你所追求的层次简洁性正在变得混乱。我将创建一个转换器层并仅在其中一种表示中工作,以免事情变得混乱。