Регулярное выражение и сопоставление с образцом в Scala, часть II

В продолжение этого вопроса

некоторый код, который компилируется и выполняется правильно с использованием захватов.

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} } Что здесь происходит?

7
задан Community 23 May 2017 в 12:33
поделиться