/ / Zależność cykliczna w kolekcjach Scala - scala, kolekcje scala, zależność cykliczna

Zależność cykliczna w kolekcjach Scala - scala, scala-collections, zależność kołowa

Cecha Traversable ma metody takie jak toList, toMap, ToSeq. Jeśli się uwzględni List, Map, Seq są podklasami Traversable, tworzy to zależność cykliczną, czyli ogólnie nie jest to pożądany wzorzec projektowy.

Rozumiem, że jest to ograniczone do biblioteki kolekcji i zapewnia kilka fajnych metod transformacji.

Czy rozważano jakiś alternatywny projekt? Takich jak klasa „narzędziowa” lub dodanie metod konwersji do Predef?

Powiedz, że chcę dodać nową klasę: class RandomList extends List {...}. Byłoby miło mieć metodę toRandomList dostępne dla wszystkich klas Traversable, ale dlaże musiałbym „odpicować moją bibliotekę” z domyślnym na Traversable? Wydaje się to trochę przesada. Dzięki projektowi klasy użytkowej mógłbym po prostu rozszerzyć tę klasę (lub Predef), aby dodać moją metodę konwersji. Jaki byłby zalecany projekt tutaj?

Odpowiedzi:

7 dla odpowiedzi № 1

Byłoby alternatywne i rozszerzalne podejście to[List], to[RandomList].

Jednak dodanie tego z implikacjami jest trochę trudne. https://gist.github.com/445874/2a4b0bb0bde29485fec1ad1a5bbf968df80f2905


6 dla odpowiedzi nr 2

Aby dodać a toRandomClass musiałbyś rzeczywiście uciec się do odpicowania wzorca mojej biblioteki. Jednak dlaczego uważasz, że to przesada? Narzut jest znikomy. I to nie byłoby pracuj nad rozszerzeniem klasy użytkowej - dlaczego Scala miałby szukać nowej klasy dla tej metody? Nie wspominając o tym, że musiałbyś utworzyć instancję takiej klasy, aby mieć dostęp do jej metod.


5 dla odpowiedzi nr 3

Nie ma tutaj zależności cyklicznej. Zależność cykliczna ma miejsce, gdy istnieje kilka niezależnych komponentów, które odnoszą się do siebie. Standardowa biblioteka Scala to jeden komponent. Ponieważ jest budowany zawsze w jednym kroku, nie ma problemu.


3 dla odpowiedzi № 4

Masz rację. Usuńmy toString z String klasa...