Pular para o conteúdo

22 · Expressões Temporais

Dimensões e escalas de unidades

Declare unidades base, dimensões derivadas e escalas exatas com @unit. Multiplicação e divisão derivam dimensões; as converte apenas dimensões compatíveis e verifica representabilidade. Sufixos de duração mantêm o comportamento em milissegundos fora de um contexto dimensional.

Nesta página

Declare unidades base, dimensões derivadas e escalas exatas com @unit. Multiplicação e divisão derivam dimensões; as converte apenas dimensões compatíveis e verifica representabilidade. Sufixos de duração mantêm o comportamento em milissegundos fora de um contexto dimensional.

Exemplo completo

Dimensões e 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()

Regras e comportamento

Validação, schemas e unidades · Documentação

A partir de um checkout do repositório:

zolo examples/features/dimensional_units.zolo

Índice global

Encontre seu caminho pela Zolo

Experimente uma ideia

Comece por aqui

9 resultados

9 resultados

enespt-br