Elm Language
felsökning
Sök…
Syntax
- Debug.log "tagg" anyValue
Anmärkningar
Debug.log tar två parametrar, en String att tagga felsökningsutgången i konsolen (så att du vet var det kommer från / vad meddelandet motsvarar) och ett värde av vilken typ som helst. Debug.log kör sidoeffekten av att logga taggen och värdet till JavaScript-konsolen och returnerar sedan värdet. Implementeringen i JS kan se ut som:
function log (tag, value){
console.log(tag, value);
return value
}
JavaScript har implicita konverteringar, så value behöver inte konverteras uttryckligen till en String för att ovanstående kod ska fungera. Elmtyper måste emellertid uttryckligen konverteras till en String , och den inbyggda koden för Debug.log visar detta i handling.
Loggar ett värde utan att avbryta beräkningarna
Debug.log andra argument returneras alltid, så du kan skriva kod som följande och det skulle bara fungera :
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case Debug.log "The Message" msg of
Something ->
...
case msg of med en case Debug.log "The Message" msg of kommer att göra att det aktuella meddelandet loggas på konsolen varje gång uppdateringsfunktionen kallas, men ändrar ingenting annat.
Piping a Debug.log
Vid körtid skulle följande visa en lista över url i din konsol och fortsätta beräkningen
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
Tidsresande felsökare
I skrivande stund (juli 2016) har elm-reaktorn tillfälligt tagits bort från sin tidsresande funktionalitet. Det går dock att få det med jinjor/elm-time-travel paketet.
Det är användningsspeglar Html.App eller Navigation program* -funktioner, till exempel istället för:
import Html.App
main =
Html.App.program
{ init = init
, update = update
, view = view
, subscriptions = subscriptions
}
du skulle skriva:
import TimeTravel.Html.App
main =
TimeTravel.Html.App.program
{ init = init
, update = update
, view = view
, subscriptions = subscriptions
}
(Naturligtvis efter att ha installerat paketet med elm-package .)
Gränssnittet för din app ändras som ett resultat, se en av demos .
Sedan version 0.18.0 kan du helt enkelt kompilera ditt program med --debug flaggan och få tidsresor felsökning utan ytterligare ansträngning.
Debug.Crash
case thing of
Cat ->
meow
Bike ->
ride
Sandwich ->
eat
_ ->
Debug.crash "Not yet implemented"
Du kan använda Debug.crash när du vill att programmet ska misslyckas, som normalt används när du är i mitten av att genomföra ett case uttryck. Det är inte rekommenderat att använda Debug.crash istället för att använda ett Maybe eller Result typ för oväntade ingångar men vanligtvis endast under utveckling (dvs du normalt inte skulle publicera Elm kod, som använder Debug.crash ).
Debug.crash tar ett String värde felmeddelandet att visa när krascha. Observera att Elm kommer också ut namnet på modulen och raden av kraschen, och om kraschen i en case uttryck, kommer det att ange värdet av case .