VSCode中F# Linter提示可移除Lambda的代码简化问题咨询
你的F#代码确实可以简化!
嘿,这个问题我太熟了~你的F# Linter提示完全没问题,这段代码真的能简化,而且方法特别简单,只是你可能没意识到F#里的操作符本质就是函数😉
简化后的代码
直接把lambda换成括号包裹的乘法操作符就行:
let product = [1;5;4;9;3] |> List.reduce (*)
为什么这样可行?
在F#里,所有二元操作符(比如*、+、-)本质上都是一等函数,它们的类型正好匹配List.reduce的参数要求:List.reduce需要一个'a -> 'a -> 'a的函数(接收两个同类型参数,返回同类型结果),而乘法操作符*对于int类型来说就是int -> int -> int,完美契合。
你不需要额外写fun a b -> a * b来包裹它,直接把(*)当作函数传递给List.reduce就可以了——括号的作用是告诉编译器:“我要把这个操作符当作函数来用,不是要执行乘法运算”。
补充小技巧
不止乘法,其他符合类型要求的二元操作符/函数都能这么用:
- 求列表总和:
[1;2;3] |> List.reduce (+) - 求列表最大值:
[1;5;3] |> List.reduce max
至于你提到的System.Math类,里面是一些更复杂的数学函数(比如平方根、三角函数),而基础算术操作符是F#语言核心提供的,所以不用去那里找啦。
内容的提问来源于stack exchange,提问作者Aage
相关产品推荐
相关产品推荐

