Próbuję zaimplementować drzewo oparte na HashMap, które obsługuje wyszukiwanie podmiejskie O (1) dla danego klucza root. W tym celu, Próbuję wykonać następujące czynności:Scala: praca wokół "nielegalnego odwołania cyklicznego"
scala> type Q = HashMap[Char, Q]
<console>:6: error: illegal cyclic reference involving type Q
type Q = HashMap[Char, Q]
^
Więc pytanie brzmi, czy jest jakiś sposób dla mnie do zrobienia czegoś w tym rodzaju, bez uciekania się do brzydkiego HashMap[Char, Any]
z późniejszego odlewania wartości do HashMap[Char, Any]
?
Teraz widzę, że mogę użyć czegoś podobnego do poniższego, aby uniknąć błędu dotyczącego cyklicznych odniesień, a może nawet być czystsze - ale byłoby fajnie dowiedzieć się, jak poprawnie wykonać to w pierwszy sposób , tylko dla wartości edukacyjnej.
import collections.mutable.HashMap
class LTree {
val children = new HashMap[Char, LTree]
}
Dzięki za bukiet.
Czy możesz wyjaśnić, jaki rodzaj struktury chcesz zdefiniować? Drzewo, którego łuki są oznaczone symbolem "Char" i których węzły w ogóle nie zawierają żadnych informacji? Jeśli tak, twój 'LTree' jest mniej więcej taki jak to tylko możliwe, ale jak napisano, możesz tworzyć tylko puste drzewa, ponieważ' children' jest niezmienne, tak samo jak 'HashMap' i konstruktor nie przyjmuje argumentów. –
Dzięki za komentarz Randall. Właśnie podkręciłem powyższą listę, aby wskazać (tak jak w moim kodzie źródłowym), że używany HashMap jest zmienny. Przypadku użycia jest rzeczywiście skierowany wykres z krawędziami i węzłami znakowanymi znakami bez żadnych informacji. Jest to w rzeczywistości prymitywny DFA z liśćmi-węzłami domyślnie uznanymi za ostateczne stany. W każdym razie powyższe zdanie nie ma związku z kwestią składni scala - domyślam się, że mały fragment, który podałem, jest jednym obejściem, byłam ciekawa, czy istnieje sposób, aby zrobić to jeszcze bardziej zwięźle, sugerowane w pierwszym zestawieniu. –
Praktycznie rzecz biorąc, oczywiście, drugi sposób z 'LTree' jest bardziej odpowiedni, ponieważ mogę wrzucić pola i funkcje członkowskie w nim dla różnych operacji drzewa. –