Elm Language
Debugging
Zoeken…
Syntaxis
- Debug.log "tag" anyValue
Opmerkingen
Debug.log twee parameters, een String om de foutopsporingsoutput in de console te taggen (zodat u weet waar deze vandaan komt / waar het bericht mee overeenkomt), en een waarde van elk type. Debug.log voert het neveneffect uit van het loggen van de tag en de waarde naar de JavaScript-console en retourneert vervolgens de waarde. De implementatie in JS kan er ongeveer zo uitzien:
function log (tag, value){
console.log(tag, value);
return value
}
JavaScript heeft impliciete conversies, dus de value hoeft niet expliciet te worden geconverteerd naar een String om de bovenstaande code te laten werken. Elm-typen moeten echter expliciet worden geconverteerd naar een String en de native code voor Debug.log laat dit in actie zien.
Een waarde vastleggen zonder berekeningen te onderbreken
Debug.log tweede argument van Debug.log wordt altijd geretourneerd, dus je zou code kunnen schrijven als het volgende en het zou gewoon werken :
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case Debug.log "The Message" msg of
Something ->
...
Het vervangen van case msg of door case Debug.log "The Message" msg of zal ervoor zorgen dat het huidige bericht wordt vastgelegd in de console telkens wanneer de updatefunctie wordt aangeroepen, maar verandert niets anders.
Leidingen voor een Debug.log
Tijdens runtime zou het volgende een lijst met URL's in uw console weergeven en doorgaan met berekenen
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
Tijdreizende debugger
Op het moment van schrijven (juli 2016) is iep-reactor tijdelijk ontdaan van zijn tijdreizende functionaliteit. Het is echter mogelijk om het te krijgen met behulp van het jinjor/elm-time-travel pakket.
Het is gebruiksspiegels van de program* -functies van Html.App of Navigation , bijvoorbeeld in plaats van:
import Html.App
main =
Html.App.program
{ init = init
, update = update
, view = view
, subscriptions = subscriptions
}
je zou schrijven:
import TimeTravel.Html.App
main =
TimeTravel.Html.App.program
{ init = init
, update = update
, view = view
, subscriptions = subscriptions
}
(Natuurlijk, na het installeren van het pakket met elm-package .)
De interface van uw app verandert hierdoor, zie een van de demo's .
Sinds versie 0.18.0 kun je eenvoudig je programma compileren met de --debug vlag en tijdreizen debuggen zonder extra moeite.
Debug.Crash
case thing of
Cat ->
meow
Bike ->
ride
Sandwich ->
eat
_ ->
Debug.crash "Not yet implemented"
U kunt Debug.crash wanneer u wilt dat het programma mislukt, meestal gebruikt wanneer u bezig bent een case expressie te implementeren. Het wordt niet aanbevolen om Debug.crash te gebruiken Debug.crash plaats van een Maybe of Result type te gebruiken voor onverwachte invoer, maar meestal alleen in de loop van de ontwikkeling (dwz u publiceert doorgaans geen Elm-code die Debug.crash gebruikt).
Debug.crash heeft één String , het foutbericht dat wordt weergegeven bij een crash. Merk op dat Elm ook de naam van de module en de regel van de crash uitvoert en als de crash zich in een case expressie bevindt, zal deze de waarde van de case aangeven.