Elm Language
Debug
Ricerca…
Sintassi
- Debug.log "tag" anyValue
Osservazioni
Debug.log accetta due parametri, una String per contrassegnare l'output di debug nella console (in modo da sapere da dove proviene / a cosa corrisponde il messaggio) e un valore di qualsiasi tipo. Debug.log esegue l'effetto collaterale della registrazione del tag e del valore nella console JavaScript, quindi restituisce il valore. L'implementazione in JS potrebbe assomigliare a qualcosa:
function log (tag, value){
console.log(tag, value);
return value
}
JavaScript ha conversioni implicite, quindi il value non deve essere convertito esplicitamente in una String affinché il codice sopra possa funzionare. Tuttavia, i tipi Elm devono essere convertiti esplicitamente in una String e il codice Native per Debug.log mostra in azione.
Registrazione di un valore senza interrompere i calcoli
Il secondo argomento di Debug.log viene sempre restituito, quindi è possibile scrivere il codice come segue e funzionerà solo :
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case Debug.log "The Message" msg of
Something ->
...
Sostituendo il case msg of con il case Debug.log "The Message" msg of farà sì che il messaggio corrente venga registrato nella console ogni volta che viene chiamata la funzione di aggiornamento, ma non cambia nient'altro.
Piping a Debug.log
In fase di esecuzione il seguente potrebbe visualizzare un elenco di url nella tua console e continuare il calcolo
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
Debugger che viaggia nel tempo
Al momento della stesura (luglio 2016) il reattore elm è stato temporaneamente privato della sua funzionalità di viaggiare nel tempo. È possibile ottenerlo, però, usando il jinjor/elm-time-travel .
Le funzioni di program* mirroring dell'uso Html.App o Navigation , ad esempio invece di:
import Html.App
main =
Html.App.program
{ init = init
, update = update
, view = view
, subscriptions = subscriptions
}
scrivi:
import TimeTravel.Html.App
main =
TimeTravel.Html.App.program
{ init = init
, update = update
, view = view
, subscriptions = subscriptions
}
(Naturalmente, dopo aver installato il pacchetto con elm-package .)
Di conseguenza, l'interfaccia della tua app cambia, vedi una delle demo .
Dalla versione 0.18.0 puoi semplicemente compilare il tuo programma con il flag --debug e ottenere il debug del viaggio nel tempo senza ulteriori sforzi.
Debug.Crash
case thing of
Cat ->
meow
Bike ->
ride
Sandwich ->
eat
_ ->
Debug.crash "Not yet implemented"
È possibile utilizzare Debug.crash quando si desidera che il programma non riesca, in genere utilizzato quando si sta implementando un'espressione di case . Non è raccomandato l'uso di Debug.crash invece di utilizzare un Maybe o Result tipo per input imprevisti, ma in genere solo durante il corso dello sviluppo (cioè in genere non sarebbe pubblicare il codice Elm che utilizza Debug.crash ).
Debug.crash richiede un valore di String , il messaggio di errore per mostrare quando si blocca. Nota che Elm produrrà anche il nome del modulo e la linea del crash, e se il crash è in un'espressione di case , indicherà il valore del case .