我希望能够检查运行时 javascript 对象。我可以将对象而不是字符串打印到控制台吗?
您可以使用
Debug.log
,例如:
import Html exposing (text)
f x = x * x
main =
let
dummy = Debug.log "dump tuple" (33, 55, f)
in text "Hello, World!"
不幸的是,没有。当您使用
Debug.log
时,所有对象在发送到控制台之前都会转换为字符串。
但是,您可以创建一个使用本机层输出实际对象的函数,但是,这是一个未记录的 API,建议仅将其用作最后的手段。
我在编码器上工作时需要更丰富的日志记录,所以我最终为其编写了一个
port
。这是一个关于 Ellie 的工作示例,代码如下:
port module Main exposing (main)
import Browser
import Html exposing (Html, button, div, text)
import Html.Events exposing (onClick)
import Json.Encode as E exposing (Value, int, object, string)
type alias Model =
{ count : Int
, name : String
}
initialModel : Model
initialModel =
{ count = 0
, name = "Foo"
}
encodeModel : Model -> Value
encodeModel model =
object
[ ( "count", int model.count )
, ( "name", string model.name )
]
port jsonConsole : Value -> Cmd msg
type Msg
= ConsoleLogJson
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
ConsoleLogJson ->
let
json =
encodeModel model
in
( model, jsonConsole json )
view : Model -> Html Msg
view model =
div [] [ button [ onClick ConsoleLogJson ] [ text "Log to console" ] ]
subscriptions : Model -> Sub Msg
subscriptions _ =
Sub.batch []
init : () -> ( Model, Cmd msg )
init flags =
( initialModel, Cmd.none )
main : Program () Model Msg
main =
Browser.element
{ init = init
, subscriptions = subscriptions
, view = view
, update = update
}
<html>
<head>
<style>
/* you can style your program here */
</style>
</head>
<body>
<main></main>
<script>
var app = Elm.Main.init({ node: document.querySelector('main') })
app.ports.jsonConsole.subscribe(function(json) {
console.log(json)
})
</script>
</body>
</html>
我确信可以做出改进,我很乐意听到它们!
let
_= Debug.log "string1" "string2"
in
您可以用变量而不是字符串替换任何一个“字符串”,只需删除引号即可。两者或仅一个。 您还可以用元组(“string1”,“s”)替换任何一个“字符串”,它看起来像这样。
let
_= Debug.log ("string1", "string2") "string3"
in
所以函数看起来像这样...
adr : Float -> Float -> Float
adr revenue rooms =
let
_= Debug.log rooms revenue
in
if rooms /= 0 then
revenue / rooms
else
0
这将安慰 12,$100.00
adr : Float -> Float -> Float
adr revenue rooms =
let
_= Debug.log "Rooms" rooms
in
if rooms /= 0 then
revenue / rooms
else
0
这会让 12 号房间感到安慰