el Enumeration
rasgo tiene un miembro de tipo que Value
representa los elementos individuales de la enumeración (en realidad es una clase interna, pero la diferencia no importa aquí).
Por lo tanto, object WeekDay
hereda ese miembro de tipo. La línea type WeekDay = Value
es solo un alias de tipo . Es útil, porque después de importarlo en otro lugar import WeekDay._
, puede usar ese tipo, por ejemplo:
def isWorkingDay(d: WeekDay) = ! (d == Sat || d == Sun)
En cambio, una versión mínima sería:
object WeekDay extends Enumeration {
val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value
}
y no tiene que importar el contenido de object WeekDay
, pero luego necesitaría usar type WeekDay.Value
y calificar miembros individuales. Entonces el ejemplo sería
def isWorkingDay(d: WeekDay.Value) = ! (d == WeekDay.Sat || d == WeekDay.Sun)
La segunda pregunta es sobre el significado de val Mon, ... = Value
. De hecho, esto es muy confuso si no analiza la implementación de Enumeration
. ¡Esta no es la asignación de un tipo! En su lugar, está llamando a una protegida método del mismo nombre , Value
que devuelve una instancia concreta del tipo Value
.
Se da la circunstancia de que puede escribir val a, b, c = foo
en Scala, y para cada valor a
, b
y c
el método foo
se llama una y otra vez. Enumeration
usa este truco para incrementar un contador interno para que cada valor sea individual.
Si abre los documentos de la API de Scala Enumeration
y hace clic en Visibility: All
, verá aparecer ese método.