- revisado después -
Hmm, no estoy seguro de que veo una diferencia, Scala 2.9.1.RC3,
val f: PartialFunction[Int, Int] = { case 2 => 3 }
f.isDefinedAt(1) // evaluates to false
f.isDefinedAt(2) // evaluates to true
f(1) // match error
val g: PartialFunction[Int, Int] = x => x match { case 2 => 3 }
g.isDefinedAt(1) // evaluates to false
g.isDefinedAt(2) // evaluates to true
g(1) // match error
Parece f
g
y se comportan exactamente el lo mismo que PartialFunctions
.
Aquí hay otro ejemplo que demuestra la equivalencia:
Seq(1, "a").collect(x => x match { case s: String => s }) // evaluates to Seq(a)
Aún más interesante:
// this compiles
val g: PartialFunction[Int, Int] = (x: Int) => {x match { case 2 => 3 }}
// this fails; found Function[Int, Int], required PartialFunction[Int, Int]
val g: PartialFunction[Int, Int] = (x: Int) => {(); x match { case 2 => 3 }}
Así que hay un poco de carcasa especial a nivel del compilador para convertir entre x => x match {...}
y justo {...}
.
actualización. Después de leer las especificaciones del lenguaje, esto me parece un error. Yo presenté SI-4940 en el seguimiento de errores.
De hecho, su primera variante no es válida. el artículo no está definido (y debería ser, no significaría un elemento de la lista). filtrar espera una función, debes escribir list.filter {item => item match ... No es solo coincidencia que desaparezca. –
@didierd, edité la pregunta para abordar su punto válido, porque creo que todavía hay una pregunta interesante aquí. –
@kipton gracias por la actualización. –