问题描述
当我尝试在榆木中使用|>
运算符时出现错误
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
仅仅因为您可以使它看起来像钉子,并不意味着您应该在上面使用锤子。