カスタムの型指定されていない式の新しい抽象構文ツリーを作成していて、その上で==演算子を次のように再定義したいと思いました。
trait Expression {
def ==(other: Expression): Expression = Equality(this, other)
def !=(other: Expression): Expression = Inequality(this, other)
}
case class Equality(e1: Expression, e2: Expression) extends Expression
case class Inequality(e1: Expression, e2: Expression) extends Expression
case class Integer(e: Int) extends Expression
case class Boolean(e: Boolean) extends Expression
私が今遭遇する唯一の問題は、そのような表現の無効性をテストすることです。たとえば、私がこれを書くとき:
val formula: Expression = someFunctionReturingAnExpression
if(formula != null) {
... use the formula.
}
メソッドをにjava.lang.NullPointerException
適用しているため、をスローします。!=
formula
!=
の表現可能性とヌルチェックをどのように行うかについての良いアイデアはありますか?