【问题标题】:Can I remove the lambda from this Elm expression?我可以从这个 Elm 表达式中删除 lambda 吗?
【发布时间】:2016-04-25 17:10:29
【问题描述】:

这是一个完整的 Elm 脚本,它将一堆元组放入 HTML <ul> 元素中。

import Html exposing (ul, li, text)
import List exposing (map)

values = [(1,2,3), (4,5,6), (7,8,9)]

main =
  ul [] (values |> map (\t -> li [] [text(toString(t))]))

我喜欢尽可能使用|> 或其他高阶运算符,但考虑到t 在上述表达式中的嵌套相对较深,我无法找到一种很好的表达方式线。 Elm 中是否存在允许 \t lambda 不必要的高阶运算符?

我意识到使用 lambda 可能更具可读性,但我想知道这里应该使用哪种组合子,因为 toString 调用位于列表中。

【问题讨论】:

    标签: lambda higher-order-functions elm combinators


    【解决方案1】:

    如果您想避免使用 lambda,则从 values 开始并“流水线”通过它会更容易,一次将其转换为您想要的最终形式:

    import Html exposing (ul, li, text)
    import List exposing (map, repeat)
    
    values = [(1,2,3), (4,5,6), (7,8,9)]
    
    main
      = map toString values
      |> map text
      |> map (repeat 1)
      |> map (li [])
      |> ul []
    

    【讨论】:

    • 太棒了,repeat 1 是关键。我目前偏爱main = ul [] (map (li [] << repeat 1 << text << toString) values),另一种方式当然是main = values |> map (toString >> text >> repeat 1 >> li []) |> ul []
    猜你喜欢
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 2021-06-23
    相关资源
    最近更新 更多