gpt4 book ai didi

scala - Scala 中的密封类

转载 作者:行者123 更新时间:2023-12-02 21:44:02 26 4
gpt4 key购买 nike

下面是我的代码片段:

sealed abstract class Expr
case class Var(name: String) extends Expr
case class Number(num: Double) extends Expr
case class UnOp(operator: String, arg: Expr) extends Expr
case class BinOp(operator: String, left: Expr, right: Expr) extends Expr

object CaseClassTest extends App {
def simplifyExp(xs: Expr): Expr = xs match {
case UnOp("-",UnOp("-", x)) => x
case BinOp("+",x,Number(0)) => x
case BinOp("*",x,Number(1)) => x
}

def describe(e: Expr): String = e match {
case Number(_) => "Number"
case Var(_) => "Var"
}
}

现在在描述方法中发生了什么,我收到一条警告,指出“匹配可能并不详尽。它会在以下输入上失败:BinOp(_, _, ), UnOp(,_)”。它对我来说看起来很完美,因为我没有考虑 BinOp、UnOp 等其他测试用例。完美

但我的问题是为什么 def SimplyExp(xs: Expr): Expr 没有出现相同的警告?我缺少什么吗?谢谢

最佳答案

simplifyExp 的情况下,您使用提取器组合,我认为编译器不够智能,无法检测到问题。

显然,以下代码在运行时失败,并出现 MatchError

CaseClassTest.simplifyExp(Var("toto"))

关于scala - Scala 中的密封类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19865923/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com