榆树:Debug.log如何工作?

Ric*_*ich 3 logging output elm

我正在记录a和的bfoldl.

words = ["mate", "bro", "bruv"]

sum2 = List.foldl
    (\a b ->
        Debug.log(toString <| a)
        Debug.log(toString <| b)
        a
    ) "guv" words
Run Code Online (Sandbox Code Playgroud)

它按预期工作,但我无法理解输出:

"mate": <function>
"guv": "mate"
"bro": <function>
"mate": "bro"
"bruv": <function>
"bro": "bruv"
Run Code Online (Sandbox Code Playgroud)

为什么输出a作为<function>,又是什么呢输出ba:b

ahs*_*tro 5

Debug.log接受两个参数,一个标记字符串,可以是任何东西,然后是要记录的值.像这样更新代码可能有效:

words = ["mate", "bro", "bruv"]

sum2 = List.foldl
    (\a b 
        Debug.log "Value of a: " a
        Debug.log "Value of b: " b
        a
    ) "guv" words
Run Code Online (Sandbox Code Playgroud)

虽然,考虑到它,我认为您需要做一些技巧来记录您不想返回的值,如下所示:

words = ["mate", "bro", "bruv"]

sum2 = List.foldl
    (\a b ->
        let
            _ = Debug.log "Value of a: " a               
            _ = Debug.log "Value of b: " b
        in
            a
    ) "guv" words
Run Code Online (Sandbox Code Playgroud)

  • 是的,由于 Elm(几乎)是纯函数式的,因此不会产生任何副作用,但由于“Debug.log”是该规则的例外之一,因此您仍然需要欺骗 Elm 编译器。通常,当您只记录单个值时,您可以使用“_”而不是“logA”来指示它是一个一次性变量。 (2认同)
  • 您可以对两者使用`_`,它实际上意味着抛弃编译器,而不仅仅是恰好命名为`_`的值(参见https://ellie-app.com/Swtbcn7wNpa1/0上的示例) (2认同)