Kotlin admite tipos de suma a través de la palabra clave . Podría modelar esto en Kotlin así:
clase sellada clase T
N ( val v : Int, val l : T = E , val r : T = E): T ()
objeto E: T ()
Y las instancias se crean así:
val ta = N (3)
val tb = N (3, E, N (4))
Utilice patrón para calcular el valor profundo:
val T. vDeep : Int
obtén () = cuando ( este ) {
es N -> v + l . vDeep + r . vDeep
is E -> 0
}
// llamado así:
check (ta.vDeep == 3)
check (tb.vDeep == 7)
Sin embargo, en Kotlin podría ser más idiomático modelar tipos como este:
class T ( val v : Int, val l : T? = null val r : T? = null )
y cree instancias como esta:
val ta = T (3)
val tb = T (3, null, T (4))
En lugar de coincidencia de patrones para calcular el valor profundo, simplemente haga esto:
val T. vDeep : Int get () = ( l ?. vDeep ?: 0) + v + ( r ?. vDeep ?: 0)
// de este modo:
check (ta.vDeep == 3)
check (tb.vDeep == 7)
No comments:
Post a Comment