给定一系列转换值的函数,应用它们最惯用的方法是什么?示例:
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
中。但在我的用例中,函数是任意的。我也认为我可以通过这种方式学习一些关于语言的知识:-)
您的做法是惯用的,因为 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