/ / Dipendenza circolare nelle collezioni Scala - scala, scala-collezioni, dipendenza circolare

Dipendenza circolare nelle collezioni Scala: scala, scala-collezioni, dipendenza circolare

Tratto Traversable ha metodi come toList, toMap, ToSeq. Dato che List, Map, Seq sono sottoclassi di Traversable, questo crea una dipendenza circolare, che è generalmente non è un modello desiderabile.

Capisco che questo è vincolato alla libreria delle raccolte e fornisce alcuni metodi di trasformazione gradevoli.

È stato preso in considerazione un progetto alternativo? Come una classe "utility" o aggiungendo i metodi di conversione a Predef?

Di 'che voglio aggiungere una nuova classe: class RandomList extends List {...}. Sarebbe bello avere un metodo toRandomList disponibile per tutte le classi attraversabili, ma perche avrei bisogno di "sfruttare la mia libreria" con un implicito su Traversable? Questo sembra un po 'eccessivo. Con un progetto di classe di utilità, potrei semplicemente estendere quella classe (o Predef) per aggiungere il mio metodo di conversione. Quale sarebbe il design consigliato qui?

risposte:

7 per risposta № 1

Un approccio alternativo ed estensibile sarebbe to[List], to[RandomList].

Tuttavia, è un po 'complicato aggiungere questo con implicazioni. https://gist.github.com/445874/2a4b0bb0bde29485fec1ad1a5bbf968df80f2905


6 per risposta № 2

Per aggiungere un toRandomClass dovresti davvero ricorrere a un magnaccia il mio modello di biblioteca. Tuttavia, perché pensi che sia eccessivo? Il sovraccarico è trascurabile. Ed è wouldn "t estendere una classe di utilità - perché Scala dovrebbe cercare la tua nuova classe per quel metodo? Per non parlare del fatto che dovresti creare un'istanza di tale classe per poter accedere ai suoi metodi.


5 per risposta № 3

Non c'è dipendenza circolare qui. La dipendenza circolare è ciò che accade quando ci sono alcuni componenti indipendenti che si riferiscono l'uno all'altro. La libreria standard Scala è un componente. Dal momento che è costruito sempre in un unico passaggio non ci sono problemi.


3 per risposta № 4

Hai ragione. Rimuoviamolo toString dal String classe...