Zajmuję się tworzeniem złożonych struktur danych w Clojure z wieloma podstrukturami.Abstrahowanie od szczegółów implementacji struktury danych w Clojure
Wiem, że będę chciał rozszerzyć tę strukturę w czasie, i czasami może chcieć zmienić wewnętrzną strukturę bez łamania różnych użytkowników struktury danych (na przykład mogę chcieć zmienić wektor na mieszańca, dodać jakiś rodzaj struktury indeksowania ze względu na wydajność, lub włączyć typu Java)
Mój obecny myślenie jest:
- Określ protokół dla ogólnej struktury z różnych metod dostępowych
- Tworzenie mini-bibliotekę funkcje nawigujące po strukturze danych e .sol. (Zapytanie-podbudowa-abc param1 param2)
- Wdrożenie struktury danych przy użyciu defrecord lub deftype, z metod określonych protokołów korzystać z mini-biblioteki
myślę, że to będzie działać, choć obawiam się, że zaczyna wyglądać raczej jak dużo "kleju" kodu. Prawdopodobnie odzwierciedla to również moją większą znajomość podejść zorientowanych obiektowo.
Jaki jest zalecany sposób zrobienia tego w Clojure?
Dzięki Michał! Wnikliwe jak zawsze :-) z pewnością zajrzy do opcji ILookup i asocjacyjnych – mikera
Jest to bardzo przydatna odpowiedź! Ale prawie trzy lata później byłoby świetnie zaktualizować to (lub utworzyć nową odpowiedź) w oparciu o funkcję dostępną teraz w wersji 1.5. Jedną z rzeczy, którą zauważyłem jest to, że 'defrecord' obecnie emituje funkcje fabryczne, nie wiem, jakie inne zmiany mogą wpłynąć na tę odpowiedź. –
Myślę, że ta odpowiedź mogłaby również użyć aktualizacji - nawet książka O'Reily Clojure mówi teraz, że defrordor clojure tworzy funkcje fabryczne. – djhaskin987