В продолжение этого вопроса
некоторый код, который компилируется и выполняется правильно с использованием захватов.
val myString = "ACATCGTAGCTGCTAGCTG"
val nucCap = "([ACTG]+)".r
myString match {
case nucCap(myNuc) => println("dna:"+myNuc)
case _ => println("not dna")
}
>scala scalaTest.scala
dna:ACATCGTAGCTGCTAGCTG
Вот более простой код без захвата, который не компилируется.
val myString = "ACATCGTAGCTGCTAGCTG"
val nuc = "[ACGT]+".r
myString match {
case nuc => println("dna")
case _ => println("not dna")
}
>scala scalaTest.scala
scalaTest.scala:7: error: unreachable code
Похоже, сопоставление должно возвращать логическое значение независимо от того, используется ли захват. {{1} } Что здесь происходит?