Sto cercando di capire come utilizzare i tipi di dati algebrici in Kotlin, quindi sto cercando di implementare un tipo BinaryTree di base nel seguente modo.Tipi di dati algebrici in Kotlin
sealed class Tree<T>{
class Node<T>(val left: Tree<T>, val right: Tree<T>): Tree<T>()
class Leaf<T>(val value: T): Tree<T>()
}
Questo è tutto bene, e mi permette di costruire la seguente struttura:
val myTree1: Tree<Int> = Node(Leaf(4), Leaf(2))
Comunque mi piacerebbe avere un tipo di "vuoto", così, così posso esprimere quanto segue:
val myTree1: Tree<Int> = Node(Node(Leaf(4), Leaf(3)), Empty)
ho provato la seguente:
sealed class Tree<T>{
class Node<T>(val left: Tree<T>, val right: Tree<T>): Tree<T>()
class Leaf<T>(val value: T): Tree<T>()
object Empty: Tree()
}
Anche se ottengo l'errore che l'argomento Type è previsto per l'oggetto Empty: Tree(), che in realtà è abbastanza logico.
ho cercato
object Empty: Tree<T>()
Ma è portato in "riferimento non risolto: T". Come ultima risorsa, ho provato a scrivere
object Empty<T>: Tree<T>()
Ma il compilatore dice "parametri di tipo non sono ammessi per gli oggetti"
C'è un modo per esprimere questo Kotlin? Vuoto dovrebbe essere un singleton, questo è il motivo per cui dovrebbe essere un oggetto. Rendendolo una classe, risolve i problemi del compilatore, ma poi devo mettere le parentesi dopo di esso come = = Empty(). Inoltre, crea oggetti non necessari, mentre dovrebbe essere davvero un valore singleton.
Apprezzerei qualsiasi aiuto su questo problema. :)
Funziona, grazie! Inoltre, ho imparato qualcosa anche sul Nulla. :) – pjozsef
qui non hai bisogno di 'out' qui - funziona senza di esso. Si prega di chiarire che – voddan
@voddan se si rimuove 'out' diventerà impossibile creare un' Node' con un 'Leaf' e' Empty'. – Michael