Scala中不区分大小写的模式匹配

Manu Chadha

我想在Scala中进行模式匹配,但不区分大小写。有没有一种方法可以编写代码,而不必为大小写使用单独的“ case”子句

//person class with first name and last name
case class Person (var fn: String, val ln: String) {
  val name = fn
  val lastName = ln
}

//two instances. Same last name but cases are different
val a2 = Person("Andy","Cale")
val a3 = Person("Andy","cale")

def isCale(person:Person) {
person match {
//I want that this case should be case insensitive
  case Person(_,"Cale") => println("last-name Cale")
  case _ => println("not Cale")
}
}
isCale(a2) 
lastname Cale

//I want this to also match 
isCale(a3)
not Cale

一种选择是提取姓氏并进行如下比较,但我有兴趣寻找是否有一种方法以防万一。

def isCale(a2:A2) {
  val s = a2.ln

  s.toLowerCase match {
  case "cale" => println("last-name Cale")
  case _ => println("not Cale")
}
尤瓦尔·伊茨恰科夫(Yuval Itzchakov)

您可以使用警卫:

def main(args: Array[String]): Unit = {
  case class Person(firstName: String, lastName: String)

  val p = Person("Yuval", "Itzchakov")
  p match {
    case Person(_, lastName) if lastName.equalsIgnoreCase("itzchakov") =>
      println(s"Last name is: $lastName")
    case _ => println("Not itzchakov")
  }
}

旁注-案例类参数将作为vals附加到已声明的类上,不需要额外的分配,也不需要构造函数上的val/var定义。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章