Sud*_*Deb 2 functional-programming scala traits case-class
以下是我的代码片段:
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"
}
}
Run Code Online (Sandbox Code Playgroud)
现在描述方法发生了什么我得到一个警告,声明" 匹配可能不是详尽无遗的.它将在以下输入上失败:BinOp(_,_,),UnOp(,_) ".它看起来非常适合我,因为我没有考虑像BinOp,UnOp这样的其他测试用例.完善
但我的问题是为什么同样的警告不会出现def simplifyExp(xs:Expr):Expr?有什么我想念的吗?谢谢
如果是simplifyExp,你使用提取器组合,我认为编译器不够聪明,无法检测到问题.
显然,以下代码在运行时失败了 MatchError
CaseClassTest.simplifyExp(Var("toto"))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1015 次 |
| 最近记录: |