Haskell是否有类似Scala中_的参数占位符语法?
Haskell是否支持类似Scala的占位符简写?
Haskell标准语法里确实没法直接写出length _ < 10这种和Scala _.length <10对应的简写形式,但有几种替代方案能实现同等的简洁效果:
- 直接写Lambda表达式:最直观的写法就是
\x -> length x < 10,虽然多了参数名,但逻辑清晰,可读性反而更强,尤其是当逻辑复杂的时候。 - 优化点-free写法:你之前用的
filter ((<10) . length) lines可以调整成更符合直觉的顺序——导入Control.Category模块后,用>>>操作符写成filter (length >>> (<10)) lines,这样是从左到右的函数组合,更贴近“先取长度再判断是否小于10”的思维顺序。 - 启用扩展语法模拟:如果非要追求类似的占位符体验,可以启用
LambdaCase扩展,写成filter (\case x -> length x <10) lines,不过这种写法并没有比直接写Lambda更简洁,更多是风格偏好。
另外要注意,Haskell里的_是模式匹配的通配符,只能用来忽略某个参数(比如\_ -> 5),但不能像Scala那样作为参数的占位符来复用,这是两种语言设计上的差异。
内容的提问来源于stack exchange,提问作者Ashkan Kh. Nazary
相关产品推荐
相关产品推荐

