You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

F# 中 |>、>>、<< 运算符使用场景与工作原理相关疑问

F# |>、>>、<< 运算符逻辑与使用场景

这三类运算符都是F#为简化函数式代码书写设计的高阶运算符,核心作用是减少嵌套括号,提升代码可读性。

1. 管道运算符 |>

工作逻辑

将左侧表达式的求值结果,作为右侧柯里化函数的最后一个参数传入,等价于直接调用函数并传入该参数,即 x |> f = f x。

使用场景

用于连续多步的求值链路,让代码执行顺序和阅读顺序保持一致,避免多层括号嵌套。
示例:

// 嵌套写法,逻辑需要从内到外读,可读性差
let res1 = List.sum (List.map (fun x -> x * x) (List.filter (fun x -> x % 2 = 0) [1..10]))

// 管道写法,从左到右顺序执行,逻辑清晰
let res2 = 
    [1..10]
    |> List.filter (fun x -> x % 2 = 0)
    |> List.map (fun x -> x * x)
    |> List.sum

2. 正向函数组合运算符 >>

工作逻辑

将两个函数拼接为一个新的函数,前一个函数的输出会作为后一个函数的输入,即 f >> g = fun x -> g (f x)。注意和|>的核心差异:>>仅组合生成新函数,不会立即传入参数求值。

使用场景

需要复用多步处理逻辑时,提前把多个步骤组合为独立函数,避免重复写完整的管道链路。
示例:

// 组合得到可复用的偶数列表处理函数
let processEvenList = 
    List.filter (fun x -> x % 2 = 0)
    >> List.map (fun x -> x * x)
    >> List.sum

// 任意符合输入要求的参数都可以直接调用该函数
let res1 = processEvenList [1..10] // 输出220
let res2 = processEvenList [5..15] // 输出6²+8²+10²+12²+14² = 660

3. 反向函数组合运算符 <<

工作逻辑

和>>的执行顺序相反,将右侧函数的输出作为左侧函数的输入,即 f << g = fun x -> f (g x),和数学领域的函数组合写法f∘g逻辑完全一致。

使用场景

适配数学函数组合的书写习惯,或是需要调整函数组合顺序适配高阶函数的参数要求时使用。
示例:

let add1 x = x + 1
let multiplyBy2 x = x * 2

// 等价于 fun x -> add1 (multiplyBy2 x),先执行右侧乘2,再执行左侧加1
let multiplyThenAdd = add1 << multiplyBy2
let res = multiplyThenAdd 3 // 输出7

核心差异快速区分

  • |>:处理值的链路,从左到右立即求值,最终得到计算结果
  • >>:处理函数的链路,从左到右组合得到新函数,调用时先执行左侧函数
  • <<:处理函数的链路,从右到左组合得到新函数,调用时先执行右侧函数

内容的提问来源于stack exchange,提问作者Graham Gayler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 05:45:03