Saltar al contenido

22 · Expresiones Temporales

Dimensiones y escalas de unidades

Declara unidades base, dimensiones derivadas y escalas exactas con @unit. Multiplicación y división derivan dimensiones; as convierte solo dimensiones compatibles y comprueba representabilidad. Los sufijos de duración mantienen el comportamiento en milisegundos fuera de un contexto dimensional.

En esta página

Declara unidades base, dimensiones derivadas y escalas exactas con @unit. Multiplicación y división derivan dimensiones; as convierte solo dimensiones compatibles y comprueba representabilidad. Los sufijos de duración mantienen el comportamiento en milisegundos fuera de un contexto dimensional.

Ejemplo completo

Dimensiones y escalas de unidades.

dimensional_units.zolo
Playground
// Exact dimensional scales; standalone durations retain milliseconds.

@unit("m", base: true) newtype Meters(decimal) where |v| v >= 0d
@unit("km", of: Meters, scale: 1000d) newtype Kilometers(decimal)
@unit("s", base: true, duration: true) newtype Seconds(decimal)
@unit("h", of: Seconds, scale: 3600d, duration: true) newtype Hours(decimal)
@unit("kph", dimension: Kilometers / Hours) newtype Kph(decimal)
@unit("kmh", dimension: Kilometers * Hours) newtype Kmh(decimal)
fn main() {
    let distance = 2km as Meters
    assert(distance.unwrap() == 2000d)
    print(distance.unwrap())
    let speed = 80km / 2h
    let displayed = speed as Kph
    assert(displayed.unwrap() == 40d)
    print(displayed.unwrap())
    let covered = (speed * 2h) as Kilometers
    assert(covered.unwrap() == 80d)
    print(covered.unwrap())
    let reverse = (2h * 80km) as Kmh
    assert(reverse.unwrap() == 160d)
    print(reverse.unwrap())
    assert(((2km / 500m) as decimal) == 4d)
    print((2km / 500m) as decimal)
    let wait = 2h
    assert(wait == 7_200_000)
    print(wait)
    let hours: Hours = 2h
    assert(hours.unwrap() == 2d)
    print(hours.unwrap())
    let nano: Seconds = 1ns
    assert(nano.unwrap() == 0.000000001d)
    print(nano.unwrap())
    assert(1ns == 0)
    print(1ns)
    let clock = 90_061_000
    print("{clock as h}:{clock as min}:{clock as s}:{clock as ms}")
}

main()

Reglas y comportamiento

Validación, esquemas y unidades · Documentación

Desde un checkout del repositorio:

zolo examples/features/dimensional_units.zolo

Índice global

Encuentra tu camino por Zolo

Prueba una idea

Empieza aquí

9 resultados

9 resultados

enespt-br