En Scala es posible formular patrones basados en los caracteres invididuales de una cadena tratándola como Seq [Char].Patrón que coincide con una cadena como Seq [Char]
Un ejemplo de esta característica se menciona en A Tour of Scala
Este es el código de ejemplo utilizado allí:
object RegExpTest1 extends Application {
def containsScala(x: String): Boolean = {
val z: Seq[Char] = x
z match {
case Seq('s','c','a','l','a', rest @ _*) =>
println("rest is "+rest)
true
case Seq(_*) =>
false
}
}
}
El problema que tengo con esto es la tercera línea del fragmento :
val z: Seq[Char] = x
¿Por qué es necesario este tipo de molde? ¿No debería una Cadena comportarse como un Seq [Char] bajo todas las circunstancias (que incluiría la coincidencia de patrones)? Sin embargo, sin esta conversión, el fragmento de código no funcionará.
Eso tiene mucho sentido y es básicamente lo que había estado adivinando. Sin embargo, no encontré el convertidor implícito. Gracias por mencionarlo. Básicamente, esta es una gran concesión a la interoperabilidad de Java, sacrificando la solidez de algunos tipos. –
No se pierde la solidez de tipo.La conversión implícita es simplemente el compilador que inserta una llamada a función, algo así como val z: Seq [Char] = string2Seq (x) –