密封类和数据类
数据类可以继承其他类,包括封装类,这将是类层级更有用。
在新的支持特性下,你可以按照如下方式重写Expr类的层级:
sealed class Expr
data class Const(val number: Double) : Expr()
data class Sum(val e1: Expr, val e2: Expr) : Expr()
object NotANumber : Expr()
fun eval(expr: Expr): Double = when (expr) {
is Const -> expr.number
is Sum -> eval(expr.e1) + eval(expr.e2)
NotANumber -> Double.NaN
}