通过应用 Elm 中的函数列表来转换值的惯用方法

问题描述 投票:0回答:1

给定一系列转换值的函数,应用它们最惯用的方法是什么?示例:

let
    transformations = [ String.replace "dogs" "cats"
                      , String.replace "bark" "purr"
                      ]
    str = "dogs are the best, they bark"
in
    foldl (\t acc -> t acc) str rs

我不喜欢

(\t acc -> t acc)
,这看起来很多余。但我想不出另一种方式来写最后一行。

当然,在这个简单的示例中,我可以将

String.replace
拉出到函数
transform (s, r) = String.replace s r
中。但在我的用例中,函数是任意的。我也认为我可以通过这种方式学习一些关于语言的知识:-)

elm
1个回答
0
投票

您的做法是惯用的,因为 lambda 很清晰,而 Elm 鼓励清晰。

您可以使用

List.foldl (<|) str transformations
代替 lambda,但这对于不习惯将反向管道用作函数的人来说更加神秘。

另一种方法是:


applyAll : List (a -> a) -> a -> a 
applyAll funcs start = 
     List.foldl (<|) start funcs


let
    transformations = [ String.replace "dogs" "cats"
                      , String.replace "bark" "purr"
                      ]
    str = "dogs are the best, they bark"
in
    applyAll transformations str

© www.soinside.com 2019 - 2024. All rights reserved.