/ Dependência circular em coleções Scala - scala, scala-coleções, dependência circular

Dependência circular nas coleções de Scala - scala, scala-coleções, dependência circular

Traço Traversable tem métodos como toList, toMap, ToSeq. Dado que List, Map, Seq são subclasses de Traversable, isso cria uma dependência circular, que é geralmente não é um padrão de design desejável.

Eu entendo que isso é restrito à biblioteca de coleções e fornece alguns bons métodos de transformação.

Houve algum projeto alternativo considerado? Tal como uma classe "utility", ou adicionando os métodos de conversão para Predef?

Digamos que eu queira adicionar uma nova classe: class RandomList extends List {...}. Seria legal ter um método toRandomList disponível para todas as classes Traversable, mas paraque eu precisaria "pimp minha biblioteca" com um implícito em Traversable? Isso parece um pouco exagerado. Com um design de classe de utilitário, eu poderia apenas estender essa classe (ou Predef) para adicionar meu método de conversão. Qual seria o design recomendado aqui?

Respostas:

7 para resposta № 1

Uma abordagem alternativa e extensível seria to[List], to[RandomList].

É um pouco complicado adicionar isso com implícitos, no entanto. https://gist.github.com/445874/2a4b0bb0bde29485fec1ad1a5bbf968df80f2905


6 para resposta № 2

Para adicionar um toRandomClass você teria que recorrer a um pimp meu padrão de biblioteca de fato. No entanto, por que você acha que é um exagero? A sobrecarga é insignificante. não seria trabalho estendendo uma classe de utilitário - por que Scala procuraria sua nova classe para esse método? Sem mencionar que você teria que instanciar tal classe para poder acessar seus métodos.


5 para resposta № 3

Não há dependência circular aqui. Dependência circular é o que acontece quando há alguns componentes independentes que se referem uns aos outros. A biblioteca padrão do Scala é um componente. Desde que é construído sempre em um passo, não há problema.


3 para resposta № 4

Você está certo. Vamos remover toString de String classe...