Scala Pattern Match之Variable Argument Lists

Scala Pattern Match之Variable Argument Lists

关于可变参数列表http://my.oschina.net/xinxingegeya/blog/617359

这里主要讲模式匹配之参数列表,

//操作符枚举的定义
object Op extends Enumeration {
  type Op = Value

  val EQ = Value("=")
  val NE = Value("!=")
  val LTGT = Value("<>")
  val LT = Value("<")
  val LE = Value("<=")
  val GT = Value(">")
  val GE = Value(">=")
}

import Op._

// 泛型 [T]
case class WhereOp[T](columnName: String, op: Op, value: T)

case class WhereIn[T](columnName: String, val1: T, value: T*)


val wheres = Seq(
  WhereIn("state", "IL", "IA", "CA"),
  WhereOp("state", EQ, "IL"),
  WhereOp("name", EQ, "buck trends"),
  WhereOp("age", GT, 29)
)

for (where <- wheres) {
  where match {
    // vals@_* 表示匹配的是可变参数列表(vals是一个参数名称)
    case WhereIn(col, val1, vals@_*) =>
      //生成用逗号隔开的字符串
      val valStr = (val1 +: vals).mkString(", ")
      println(s"where $col in ($valStr)")
    case WhereOp(col, op, value) => println(s"where $col $op $value")
    case _ => println(s"ERROR")
  }
}

=======END=======

你可能感兴趣的:(Scala Pattern Match之Variable Argument Lists)