Elm语法,管道转发匹配大小写而不使用临时变量

时间:2018-03-22 08:19:59

标签: elm

F#, Pipe forward a match case without using temp variable

与上面的问题类似,有没有办法将变量管道转发到匹配大小写而不使用临时变量或lambda?

这个想法:

let temp =
    x 
    |> Function1
    |> Function2
    // ........ Many functions later.
    |> FunctionN
in

result =
    case temp of
        Case1 -> "Output 1"
        Case2 -> "Output 2"
        _ -> "Other Output"

我希望实现以下目标:

result =
    x 
    |> Function1
    |> Function2
    // ........ Many functions later.
    |> FunctionN
    |> case of     // Syntax Error! Should use "case temp of" 
        Case1 -> "Output 1"
        Case2 -> "Output 2"
        _ -> "Other Output"

我可以使用lambda函数,但我仍然会“命名”临时变量。

result =
    x 
    |> Function1
    |> Function2
    // ........ Many functions later.
    |> FunctionN
    |> \temp -> case temp of      
        Case1 -> "Output 1"
        Case2 -> "Output 2"
        _ -> "Other Output"

在Elm语法中有没有办法“摆脱”临时变量?感谢。

1 个答案:

答案 0 :(得分:9)

不,榆树没有这种能力。

像Haskell这样的其他语言通过LambdaCase扩展允许类似的东西,但是榆树倾向于避免有太多的方法来说同样的事情,在保持语法简单方面犯了错误。

issue has been raised before和榆树的作者拒绝了该提案,并附有以下评论:

  

更普遍的是,现在的重点不是增加榆树的语法。 (我们实际上更经常丢弃东西。)如果某些东西已经在Elm中表达,我对提供表达它的其他方法并不十分感兴趣。在这种情况下,我认为我们会添加语法,使事情变得不那么规律,更难阅读。