2012-03-15 22 views
12

Me pregunto por qué no existe un literal para tipos de funciones parciales. Tengo que escribir¿Por qué no hay una función parcial tipo literal?

val pf: PartialFunction[Int, String] = { 
    case 5 => "five" 
} 

donde un literal como :=> sería más corta:

val pf: Int :=> String = { 
    case 5 => "five" 
} 

funciones parciales se utilizan con frecuencia y en Scala ya alguna característica "especial", ¿por qué no hay una sintaxis especial para ello?

Respuesta

20

Probablemente en parte debido a que no es necesario un literal: siempre se puede escribir su propio :=> como operador de tipo infija si quieres sintaxis más concisa:

scala> type :=>[A, B] = PartialFunction[A, B] 
defined type alias $colon$eq$greater 

scala> val pf: Int :=> String = { case 5 => "five" } 
pf: :=>[Int,String] = <function1> 

scala> pf.isDefinedAt(0) 
res0: Boolean = false 

scala> pf.isDefinedAt(5) 
res1: Boolean = true 

No soy uno de los diseñadores del lenguaje Scala, así que esto es más o menos una suposición sobre el "¿por qué?". Es posible que obtenga mejores respuestas en the scala-debate list, que es un lugar más apropiado para las preguntas sobre el diseño del lenguaje.

+0

+1 Iba a sugerir el tipo de truco de alias, pero no sabía que era posible dar un paso más y usar el formulario de infijo. –

+0

@Vlad, voy a admitir que pasé por una fase (breve) de abuso de operador de tipo infijo cuando me enteré de ellos, y todavía creo que es una pequeña característica de lenguaje bastante ingeniosa. –

+2

He preguntado lo mismo antes y la razón por la que no se ha agregado al lenguaje (existía brevemente como '~>') tiene que ver con cómo se deducen los parámetros de tipo l-2-r –

Cuestiones relacionadas