Elm Language
디버깅
수색…
통사론
- Debug.log "tag"anyValue
비고
Debug.log 는 콘솔에서 디버그 출력에 태그를 지정하는 String (메시지의 출처 / 메시지가 해당하는 위치를 알 수 있도록)과 모든 유형의 값이라는 두 개의 매개 변수를 사용합니다. Debug.log 는 태그와 값을 JavaScript 콘솔에 기록하는 부작용을 실행 한 다음 값을 반환합니다. JS에서의 구현은 다음과 같을 것이다.
function log (tag, value){
console.log(tag, value);
return value
}
JavaScript에는 암시 적 변환이 있으므로이 value 을 명시 적으로 String 으로 변환 할 필요가 없습니다. 그러나 Elm 형식은 명시 적으로 String 으로 변환되어야하며 Debug.log 의 네이티브 코드는이 동작을 보여줍니다.
계산을 중단하지 않고 값 로깅
Debug.log 의 두 번째 인수는 항상 반환되므로 다음과 같은 코드를 작성하면 작동합니다 .
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case Debug.log "The Message" msg of
Something ->
...
case msg of 를 case Debug.log "The Message" msg of 하면 update 함수가 호출 될 때마다 현재 메시지가 콘솔에 기록되지만 다른 내용은 변경되지 않습니다.
Debug.log 파이핑
런타임에 다음은 콘솔에 url 목록을 표시하고 계산을 계속합니다
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
시간 이동 디버거
서면 (2016 년 7 월) 당시 elm-reactor 는 일시적으로 여행 기능을 제거했습니다. 그래도 jinjor/elm-time-travel 패키지를 사용하면 얻을 수 있습니다.
사용법은 Html.App 또는 Navigation 모듈의 program* 함수를 미러링합니다 (예 Html.App .
import Html.App
main =
Html.App.program
{ init = init
, update = update
, view = view
, subscriptions = subscriptions
}
너는 다음과 같이 쓸 것이다.
import TimeTravel.Html.App
main =
TimeTravel.Html.App.program
{ init = init
, update = update
, view = view
, subscriptions = subscriptions
}
(물론 elm-package 패키지를 설치 한 후).
앱의 인터페이스가 변경됩니다. 데모 중 하나를 참조하십시오 .
버전 0.18.0 부터는 --debug 플래그로 프로그램을 컴파일하고 추가 노력없이 시간 이동 디버깅 을 할 수 있습니다.
Debug.Crash
case thing of
Cat ->
meow
Bike ->
ride
Sandwich ->
eat
_ ->
Debug.crash "Not yet implemented"
프로그램이 실패하기를 원할 때 Debug.crash 를 사용할 수 있습니다. 대개 case 표현을 구현하는 중일 때 사용됩니다. 예기치 않은 입력에 Maybe 또는 Result 유형을 사용하는 대신 Debug.crash 를 사용하는 것은 권장 되지 않지만 일반적으로 개발 과정에서만 (예 : 일반적으로 Debug.crash 를 사용하는 Elm 코드를 게시하지 Debug.crash ).
Debug.crash 는 충돌 할 때 표시 할 오류 메시지 인 하나의 String 값을 사용합니다. Elm은 또한 모듈 이름과 충돌 라인을 출력 할 것이고, 충돌이 case 표현식에 있다면, case 의 값을 나타낼 것임을 주목하십시오.