Elm Language
Debuggen
Suche…
Syntax
- Debug.log "tag" anyValue
Bemerkungen
Debug.log benötigt zwei Parameter, einen String um die Debug-Ausgabe in der Konsole zu Debug.log (damit Sie wissen, woher sie kommt / was die Nachricht ist) und einen Wert eines beliebigen Typs. Debug.log führt den Nebeneffekt der Protokollierung des Tags und des Werts in der JavaScript-Konsole aus und gibt den Wert zurück. Die Implementierung in JS könnte ungefähr so aussehen:
function log (tag, value){
console.log(tag, value);
return value
}
JavaScript hat implizite Konvertierungen, daher muss value nicht explizit in einen String konvertiert werden, damit der obige Code funktioniert. Elm-Typen müssen jedoch explizit in einen String konvertiert werden, und der native Code für Debug.log zeigt dies in Aktion.
Einen Wert protokollieren, ohne die Berechnungen zu unterbrechen
Debug.log zweite Argument von Debug.log wird immer zurückgegeben. Sie könnten also Code wie den folgenden schreiben und es würde funktionieren :
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case Debug.log "The Message" msg of
Something ->
...
Ersetzen von case msg of mit case Debug.log "The Message" msg of bewirkt, dass die aktuelle Nachricht bei jedem Aufruf der Aktualisierungsfunktion in der Konsole protokolliert wird.
Debug.log weiterleiten
Zur Laufzeit wird im Folgenden eine Liste mit URLs in Ihrer Konsole angezeigt und die Berechnung fortgesetzt
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
Zeitreisender Debugger
Zum Zeitpunkt der Erstellung dieses Berichts (Juli 2016) wurde der Ulmenreaktor zeitweilig seiner Zeitfunktionalität beraubt. Es ist jedoch möglich, es mit dem jinjor/elm-time-travel .
Es spiegelt die program* Html.App oder Navigation Html.App , zum Beispiel anstelle von:
import Html.App
main =
Html.App.program
{ init = init
, update = update
, view = view
, subscriptions = subscriptions
}
du würdest schreiben:
import TimeTravel.Html.App
main =
TimeTravel.Html.App.program
{ init = init
, update = update
, view = view
, subscriptions = subscriptions
}
(Natürlich nach der Installation des Pakets mit elm-package .)
Die Benutzeroberfläche Ihrer App ändert sich dadurch, siehe eine der Demos .
Seit Version 0.18.0 können Sie Ihr Programm einfach mit dem Flag --debug kompilieren und ohne Zeitaufwand das Zeitreisen-Debugging durchführen .
Debug.Crash
case thing of
Cat ->
meow
Bike ->
ride
Sandwich ->
eat
_ ->
Debug.crash "Not yet implemented"
Sie können Debug.crash wenn das Programm fehlschlagen soll. Debug.crash wird normalerweise verwendet, wenn Sie gerade einen case Ausdruck implementieren. Es wird nicht empfohlen, Debug.crash statt unerwarteter Eingaben anstelle eines Maybe oder Result Typs zu verwenden, sondern normalerweise nur während der Entwicklung (dh Sie veröffentlichen normalerweise keinen Elm-Code, der Debug.crash ).
Debug.crash einen String Wert, die Fehlermeldung, die beim Absturz Debug.crash wird. Beachten Sie, dass Elm wird der Name des Moduls auch die Ausgabe und die Leitung des Absturzes, und wenn der Absturz in einem ist case Ausdruck, wird es den Wert des angeben case .