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

0,17 0,18,0

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 .

0,18,0

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 .



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow