Supongamos que quiero tener una clase como Java Date
. Su único miembro de datos es mucho lo que representa los milisegundos desde 1970.Sobrecarga de tipos primitivos de "boxeo" a través de implicits en Scala
¿Sería/Podría ser de cualquier beneficio de rendimiento de sólo hacer un nuevo tipo Scala:
type PrimitiveDate = Long
continuación, puede agregar mediante el uso de métodos implícitos conversión, como se hace para int con RichInt
. ¿Este "boxeo" del tipo primitivo en una clase rica implica algún gasto (creación de clase)? Básicamente sólo podría tener un método estático
def addMonth(date: PrimitiveDate, months: Int): PrimitiveDate = date + 2592000000 * months
y dejar que la cifra sistema del tipo que tiene que ser aplicada cuando d addMonth 5
aparece dentro de su código.
Editar
Parece que el alias se crea escribiendo type PrimitiveDate = Long
no se hace cumplir por el compilador Scala. ¿Está creando una clase adecuada, incluyendo el Long, la única manera de crear un tipo forzado en Scala?
¿Qué tan útil considera que sea capaz de crear un alias de tipo forzado para tipos primitivos?
Buen punto en los "alias obligatorios". Esa era una de las cosas que me preguntaba. Entonces, ¿no hay forma de crear un alias de tipo apropiado para un tipo primitivo en Scala? – ziggystar
@ziggystar - no, no hay. Tiendo a usar alias de tipo para una de dos cosas: cosas privadas internas como las que Kevin habla a continuación; importación de objetos de paquete (es decir, por qué 'List' todavía parece estar en el paquete' scala') –
Creo que Miles Sabin creó una [solución] elegante y de alto rendimiento (https://gist.github.com/milessabin/89c9b47a91017973a35f) 11 meses después de que se hizo esta pregunta. – itsbruce