Elm Language
Debugowanie
Szukaj…
Składnia
- Debug.log „tag” anyValue
Uwagi
Debug.log przyjmuje dwa parametry, String Debug.log do oznaczenia wyniku debugowania w konsoli (abyś wiedział, skąd pochodzi / co odpowiada komunikatowi) oraz wartość dowolnego typu. Debug.log wykonuje efekt uboczny logowania tagu i wartości do konsoli JavaScript, a następnie zwraca wartość. Implementacja w JS może wyglądać mniej więcej tak:
function log (tag, value){
console.log(tag, value);
return value
}
JavaScript ma niejawne konwersje, więc value powyższego kodu nie musi być jawnie konwertowana na String . Jednak typy wiązów muszą zostać jawnie przekonwertowane na String , a kod macierzysty dla Debug.log pokazuje to w akcji.
Rejestrowanie wartości bez przerywania obliczeń
Drugi argument Debug.log jest zawsze zwracany, więc możesz napisać kod podobny do następującego i po prostu zadziała :
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case Debug.log "The Message" msg of
Something ->
...
Zamiana case msg of case Debug.log "The Message" msg of spowoduje, że bieżący komunikat będzie rejestrowany w konsoli przy każdym wywołaniu funkcji aktualizacji, ale nic innego nie zmienia.
Przesyłanie pliku dziennika debugowania.log
W czasie wykonywania poniższe polecenie wyświetli listę adresów URL w konsoli i kontynuuje obliczenia
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
Debuger podróżujący w czasie
W momencie pisania (lipiec 2016 r.) Wiąz wiąz został tymczasowo pozbawiony funkcji podróżowania w czasie. Można go jednak uzyskać, korzystając z pakietu jinjor/elm-time-travel .
Jego użycie odzwierciedla Html.App lub program* modułów Navigation program* , na przykład zamiast:
import Html.App
main =
Html.App.program
{ init = init
, update = update
, view = view
, subscriptions = subscriptions
}
napisałbyś:
import TimeTravel.Html.App
main =
TimeTravel.Html.App.program
{ init = init
, update = update
, view = view
, subscriptions = subscriptions
}
(Oczywiście po zainstalowaniu pakietu z pakietem elm-package ).
Interfejs aplikacji zmienia się w wyniku, zobacz jedną z wersji demonstracyjnych .
Od wersji 0.18.0 możesz po prostu skompilować swój program z flagą --debug i uzyskać debugowanie w czasie bez dodatkowego wysiłku.
Debug.Crash
case thing of
Cat ->
meow
Bike ->
ride
Sandwich ->
eat
_ ->
Debug.crash "Not yet implemented"
Możesz użyć Debug.crash gdy chcesz, aby program się nie powiódł, zwykle używany, gdy jesteś w trakcie implementacji wyrażenia case . Nie zaleca się stosowania Debug.crash zamiast korzystania z Maybe lub Result typ dla nieoczekiwanych wejść, ale zazwyczaj tylko w trakcie rozwoju (czyli zazwyczaj nie publikuje kod Elm który wykorzystuje Debug.crash ).
Debug.crash trwa jeden String wartość, komunikat o błędzie, aby pokazać, kiedy upaść. Zauważ, że Elm wyświetli także nazwę modułu i linię awarii, a jeśli awaria jest wyrażeniem case , wskaże wartość case .