スカラでパターンマッチングを行いたいが、大文字と小文字を区別しないでください。私は下と上ケースのために別々の「ケース」句を使用せずに、コードを書くことができますが道Scalaで大文字と小文字を区別しないパターン一致
//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
一つは、代替は、姓を抽出し、次のように比較することですが、そこにある場合、私は見つけることに興味がありますされます場合によってはこれを行う方法。 - クラスパラメータが宣言されたクラスのval
Sとして添付される場合、追加の割り当てとval
が不要のための必要はありません
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")
}
}
サイドノート:あなたはガードを使用することができます
def isCale(a2:A2) {
val s = a2.ln
s.toLowerCase match {
case "cale" => println("last-name Cale")
case _ => println("not Cale")
}
あなたのケースクラスは非常に慣用的ではありませんが。考え方は、ケースクラスのすべての引数/メンバーは不変でなければならないということです。全体的に、ケースクラスは主に不変データを表現するために存在します。クラシッターJavaBeanのようなクラスをセッターで使用したい場合は、通常のクラスを使用することをお勧めします。 – marios