Voici le code que je suis en train d'utiliser pour illustrer la correspondance de motif:modèle Comprendre correspondant à l'exemple de code
package patternmatching
object patterntest {
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
def simplifyTop(expr: Expr): Expr = expr match {
case UnOp("-", UnOp("-", e)) => e //double negation
case BinOp("+", e, Number(0)) => e //adding zero
case BinOp("*", e, Number(1)) => e //Mutiplying by one
case _ => expr
}
def main(args: Array[String]) {
UnOp("-" , UnOp("-", e))
}
}
Comment puis-je tester chacun des modèles? La ligne UNOP ("-", UNOP ("-", e)) au sein de la principale méthode donne une erreur:
not found: value e
'UnOp (" - ", UnOp (" - ", Var (" foo ")))' dans principal, non? –
@ om-nom-nom Merci, cela vous dérangerait-il d'expliquer comment fonctionne la correspondance de motifs dans le contexte ci-dessus. Je ne comprends toujours pas. – user701254
Dans la méthode principale, vous construisez deux UnOp imbriqués où l'un interne le deuxième argument vous essayez de passer une variable indéfinie. – pedrofurla