【问题标题】:How to force evaluation of value in Debug.log如何在 Debug.log 中强制评估值
【发布时间】:2016-06-09 14:54:00
【问题描述】:

使用 Elm 0.17,我有时想查看计算过程中采取的步骤,例如:

let
    names = Debug.log "accounts"
        List.map (\x -> x.name) accounts

    sortedNames = Debug.log "sorted accounts"
        List.sortBy String.toLower names

    options =
        List.map (viewAccountOption selectedName) sortedNames
in
    [ viewEmptyOption ] ++ options

这会记录以下内容:

accounts: <function>
sorted accounts: <function:sortBy>

我知道 Elm 是懒惰的,当实际需要值时会评估 thunk。

我在elm-core Basics 或包中的其他任何地方都找不到forcestrict 函数。

有没有办法强制评估一个值?

【问题讨论】:

  • 就像注释一样... Elm 并不懒惰,即所有指令都立即执行

标签: elm


【解决方案1】:

您可以使用括号来做到这一点:

Debug.log "accounts"
    (List.map (\x -> x.name) accounts)

或使用&lt;| 运算符

Debug.log "accounts" <|
    List.map (\x -> x.name) accounts

编辑:

原因是 Debug.log 使用 List.map(一个函数)作为第二个参数进行评估,然后返回该参数以与该行的其余部分组合。您只需要提示 elm 您预期的参数优先级是什么

【讨论】:

    猜你喜欢
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    相关资源
    最近更新 更多