Buscar..


Sintaxis

  • Medidor de clase (medidores de val: doble) extiende AnyVal
  • tipo metro = doble

Observaciones

Se recomienda usar clases de valor para las unidades o una biblioteca dedicada para ellas.

Tipo de alias

type Meter = Double

Este enfoque simple tiene serios inconvenientes para el manejo de la unidad, ya que cualquier otro tipo que sea Double será compatible con él:

type Second = Double
var length: Meter = 3
val duration: Second = 1
length = duration
length = 0d

Todas las compilaciones anteriores, por lo que en este caso las unidades solo se pueden usar para marcar los tipos de entrada / salida para los lectores del código (solo la intención).

Clases de valor

case class Meter(meters: Double) extends AnyVal
case class Gram(grams: Double) extends AnyVal

Las clases de valor proporcionan una forma segura para el tipo de codificación de unidades, incluso si requieren un poco más de caracteres para usarlas:

var length = Meter(3)
var weight = Gram(4)
//length = weight //type mismatch; found : Gram required: Meter

Al extender AnyVal s, no hay una penalización de tiempo de ejecución por usarlos, en el nivel JVM, esos son tipos primitivos regulares ( Double s en este caso).

En caso de que desee generar automáticamente otras unidades (como Velocity aka MeterPerSecond ), este enfoque no es el mejor, aunque hay bibliotecas que también se pueden usar en esos casos:



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow