Vorrei convertire implicitamente tra l'oggetto Elem XML di Scala e un'altra rappresentazione di un elemento XML, nel mio caso dom4j Element. Ho scritto le seguenti conversioni implicite:Conversione implicita tra tipi di collezione Scala
implicit def elemToElement(e: Elem): Element = ... do conversion here ...
implicit def elementToElem(e: Element): Elem = ... do conversion here ...
Fin qui tutto bene, questo funziona.
Ora ho bisogno anche di raccolte di detti elementi per convertire entrambi i modi. Per prima cosa, devo assolutamente scrivere metodi di conversione aggiuntivi? Le cose non sembra funzionare se non l'avessi fatto.
ho cercato di scrivere il seguente:
implicit def elemTToElementT(t: Traversable[Elem]) = t map (elemToElement(_))
implicit def elementTToElemT(t: Traversable[Element]) = t map (elementToElem(_))
Questo non sembra troppo ideale, perché se il metodo di conversione prende un Traversable, poi ritorna anche una Traversable. Se passo una lista, ottengo anche un Traversable. Quindi presumo che la conversione dovrebbe essere parametrizzata in qualche modo.
Quindi qual è il modo standard di scrivere queste conversioni per essere il più generico possibile?
Perché è più confuso essere in grado di convertire automaticamente da 'X' a' Y' che da 'Lista [X]' a 'Lista [Y]'? Riempie esattamente lo stesso bisogno, cioè che non ti interessa realmente quale sia la rappresentazione usata e vuoi che il compilatore gestisca il lavoro occupato per te. –
È in gran parte una questione di stile e buone pratiche. Chiedere implicitamente al lavoro che molta magia sta chiedendo guai. Sono, a mio avviso, uno dei BFG di scala: fai attenzione a cosa lo indicherai. – sblundy
Sono d'accordo con Rex: non sono d'accordo sul fatto che sia confuso. Al contrario, avrei persino sperato che la definizione di una conversione implicita di un determinato tipo implicasse automaticamente la conversione implicita (diciamo anche "monadica") di contenitori per quel tipo di lavoro. – ebruchez