Осуществляет ли порядок альтернатив в Scala Выражение соответствия имеет значение с точки зрения производительности?

В частности, в отношении сопоставления с образцом и классов case. Рассмотрим следующее:

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 Expr {
  def simplify(expr: Expr): Expr = expr match {
    // Some basic simplification rules...
    case UnOp("-", UnOp("-", e)) => simplify(e) // Double negation
    case BinOp("+", e, Number(0)) => simplify(e) // Adding zero
    case BinOp("-", e, Number(0)) => simplify(e) // Subtracting zero
    case BinOp("*", e, Number(1)) => simplify(e) // Multiplying by one
    case BinOp("*", e, Number(0)) => Number(0) // Multiplying by zero
    case _ => expr // Default, could not simplify given above rules
  }
}

Для любого примера вызова, скажем, simpleify (UnOp («-», UnOp («-», UnOp («-», UnOp («-», Var («x»)) )))) (что приводит к Var ("x") ), имеет ли значение порядок альтернатив в выражении соответствия для производительности?

Дополнительное примечание, отчасти связанное (мой собственное наблюдение): Одна вещь, которая действительно поражает меня в упрощении , заключается в том, что это рекурсивная функция, хотя в отличие от других рекурсивных функций, которые я написал / рассмотрел, базовый вариант используется последним, избегайте преждевременного прерывания.

12
задан knpwrs 17 August 2011 в 18:00
поделиться