EDIT: Este foi um bug de idade muito que fixa em Scala 2,8 e mais tarde
Durante algumas experiências em torno questão Padrão combinando uma String como Seq [Char] , deparei com um outro fenômeno correspondência estranho. Considere o seguinte código que trata uma seqüência como uma seqüência de caracteres:
def %%&#(input: String) : String = {
val uha : Seq[Char] = input
uha match {
case Seq() => Empty
case Seq(first @ _, 'o', 'o') => Bar
case _ => Oh
}
}
Chamando entrada na corda vazia produz corretamente Empty.
No entanto, se eu reescrever a primeira cláusula partida como
case Seq.empty => Empty
a correspondência de falha e coincide com a cláusula padrão em vez disso.
Andando pelo código fonte biblioteca Scala (que você não deveria ter que fazer em um mundo ideal :-)) Eu acredito que tanto Seq()e Seq.emptyirá resultar em RandomAccessSeq.empty. Aparentemente, este não coincide com o fenómeno descrito acima porque só Seq()corresponde a sequência de vazio.
UPDATE: Após alguma experimentação adicional esta questão pode ser reduzida para o seguinte:
val list = List()
>>> list2: List[Nothing] = List()
val emptySeq = Seq.empty
list == emptySeq
>>> res1: Boolean = false
Isto significa basicamente que um vazio Seqnão faz automaticamente igual Seq.empty. Então, quando a comparação com uma constante (em vez de usar um extrator como sugerido por starblue) esta desigualdade leva ao jogo falha. O mesmo é verdade quando se interpretam o vazio Stringcomo uma sequência.













