Elm Language
Depuración
Buscar..
Sintaxis
- Debug.log "tag" anyValue
Observaciones
Debug.log toma dos parámetros, una String para etiquetar la salida de depuración en la consola (para que sepa de dónde viene / a qué corresponde el mensaje) y un valor de cualquier tipo. Debug.log ejecuta el efecto secundario de registrar la etiqueta y el valor en la consola de JavaScript, y luego devuelve el valor. La implementación en JS podría verse algo como:
function log (tag, value){
console.log(tag, value);
return value
}
JavaScript tiene conversiones implícitas, por lo que el value no tiene que convertirse explícitamente en una String para que el código anterior funcione. Sin embargo, los tipos de Elm deben convertirse explícitamente en una String , y el código nativo para Debug.log muestra en acción.
Registrar un valor sin interrumpir los cálculos
El segundo argumento de Debug.log siempre se devuelve, por lo que podría escribir código como el siguiente y simplemente funcionaría :
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case Debug.log "The Message" msg of
Something ->
...
Sustitución case msg of con el case Debug.log "The Message" msg of hará que el mensaje actual que estar conectado a la consola cada vez que la función de actualización se llama, pero no cambia nada más.
Canalizando un Debug.log
En el tiempo de ejecución, lo siguiente mostraría una lista de url en su consola y continuaría el cálculo
payload =
[{url:..., title:...}, {url=..., title=...}]
main =
payload
|> List.map .url -- only takes the url
|> Debug.log " My list of URLs" -- pass the url list to Debug.log and return it
|> doSomething -- do something with the url list
Depurador que viaja en el tiempo
Al momento de escribir (julio de 2016), elm-reactor ha sido despojado temporalmente de su funcionalidad de viaje en el tiempo. Sin embargo, es posible obtenerlo utilizando el jinjor/elm-time-travel .
Su uso refleja las Html.App program* módulos Html.App o Navigation , por ejemplo, en lugar de:
import Html.App
main =
Html.App.program
{ init = init
, update = update
, view = view
, subscriptions = subscriptions
}
usted escribiría:
import TimeTravel.Html.App
main =
TimeTravel.Html.App.program
{ init = init
, update = update
, view = view
, subscriptions = subscriptions
}
(Por supuesto, después de instalar el paquete con elm-package .)
La interfaz de su aplicación cambia como resultado, vea una de las demostraciones .
Desde la versión 0.18.0 , simplemente puede compilar su programa con la --debug y obtener la depuración del viaje en el tiempo sin ningún esfuerzo adicional.
Debug.crash
case thing of
Cat ->
meow
Bike ->
ride
Sandwich ->
eat
_ ->
Debug.crash "Not yet implemented"
Puedes usar Debug.crash cuando quieres que el programa falle, normalmente se usa cuando estás implementando una expresión de case . No se recomienda el uso Debug.crash lugar de utilizar un Maybe o Result tipo para entradas inesperadas, pero normalmente sólo durante el curso del desarrollo (es decir, que por lo general no publicará código que utiliza Elm Debug.crash ).
Debug.crash toma un valor de String , el mensaje de error que se muestra cuando falla. Tenga en cuenta que Elm también mostrará el nombre del módulo y la línea del bloqueo, y si el bloqueo se produce en una expresión de case , indicará el valor del case .