如何正确使用|>运算符?

问题描述

当我尝试在榆木中使用|>运算符时出现错误

kl : List Float
kl =
    List.map toFloat (List.range 1 10)
kll : Float
kll =
    let
        half x =
            x / 2
    in
    List.sum (List.map half (List.map toFloat (List.range 1 10)))

下面的代码我使用|>并收到错误消息:

klpipe : List Float
klpipe =
    1 10 |> List.range |> toFloat |> List.map

解决方法

|>仅可用于将左侧的单个参数应用于右侧的函数。以下是一些示例,可让您直观了解其工作原理:

x |> f == f x
y |> f x == f x y
f x |> g == g (f x)

您可以 使用|>将多个参数应用于单个函数,但是您必须一次以相反的顺序执行一个操作,并使用括号来违背其自然的关联性:

10 |> (1 |> List.range) |> (toFloat |> List.map)

在这里,带括号的表达式都求值为“适合”管道右侧的函数。如果没有括号,1 |> 10 |> List.range相当于`List.range(10 1)。

但是,我觉得这不是很可读,而是会更加谨慎地使用管道运算符:

List.range 1 10 |> List.map toFloat

仅仅因为您可以使它看起来像钉子,并不意味着您应该在上面使用锤子。