"open Seq" 或类似效果的任何方法?
Any way to "open Seq" or similar effect?
a
|>Seq.map fixLine
|>Seq.map splitCells
|>Seq.map getName
|>Seq.where(fun a->not<|Seq.isEmpty a)
|>Seq.map fixName
总是觉得很烦,同时保持很多Seq
。在行中。建议一个省略它们的好方法...
例如,对列表使用 List.map
,对 seq 使用 map
,或者当我使用 seq 和列表时将它们分成不同的模块。
a
|>map fixLine
|>map splitCells
|>map getName
|>where(fun a->not<|isEmpty a)
|>map fixName
看起来真的好多了。
我认为没有一种简单的方法可以避免重复 Seq
- 这只是 F# 使事情变得更明确的一个地方(以便您知道发生了什么)。
但是您可以使用 F# Core Fluent library,它为您提供更像 C# 的语法 .
:
a.map(fixLine).map(splitCells).map(getName).filter(isEmpty >> not).map(fixName)
您也可以只为您想要的函数定义别名:
let map = Seq.map
let where = Seq.filter
或者您可以通过定义自己的运算符使其更加简洁:
let (|!>) s f = Seq.map f s
let (|*>) s f = Seq.filter f s
a
|!> fixLine
|!> splitCells
|!> getName
|*> (fun a->not<|isEmpty a)
|!> fixName
但在这一点上,您的代码变得过于神秘 - 也就是说,查看代码的人将很难理解正在发生的事情。
最后,您可以通过注意 map
s 的组合是 map
的组合来使原始代码看起来更好一些:
a
|> Seq.map (fixLine >> splitCells >> getName)
|> Seq.filter (not << isEmpty)
|> Seq.map fixName
这是我个人更喜欢的解决方案。
总的来说,我的个人经验表明,尽管最初的冲动是 "fix" 通过缩小重复部分本身来减少重复性,但 通常 有更好的解决方案这将使您的代码不仅看起来更好,而且分解得更好。
a
|>Seq.map fixLine
|>Seq.map splitCells
|>Seq.map getName
|>Seq.where(fun a->not<|Seq.isEmpty a)
|>Seq.map fixName
总是觉得很烦,同时保持很多Seq
。在行中。建议一个省略它们的好方法...
例如,对列表使用 List.map
,对 seq 使用 map
,或者当我使用 seq 和列表时将它们分成不同的模块。
a
|>map fixLine
|>map splitCells
|>map getName
|>where(fun a->not<|isEmpty a)
|>map fixName
看起来真的好多了。
我认为没有一种简单的方法可以避免重复 Seq
- 这只是 F# 使事情变得更明确的一个地方(以便您知道发生了什么)。
但是您可以使用 F# Core Fluent library,它为您提供更像 C# 的语法 .
:
a.map(fixLine).map(splitCells).map(getName).filter(isEmpty >> not).map(fixName)
您也可以只为您想要的函数定义别名:
let map = Seq.map
let where = Seq.filter
或者您可以通过定义自己的运算符使其更加简洁:
let (|!>) s f = Seq.map f s
let (|*>) s f = Seq.filter f s
a
|!> fixLine
|!> splitCells
|!> getName
|*> (fun a->not<|isEmpty a)
|!> fixName
但在这一点上,您的代码变得过于神秘 - 也就是说,查看代码的人将很难理解正在发生的事情。
最后,您可以通过注意 map
s 的组合是 map
的组合来使原始代码看起来更好一些:
a
|> Seq.map (fixLine >> splitCells >> getName)
|> Seq.filter (not << isEmpty)
|> Seq.map fixName
这是我个人更喜欢的解决方案。
总的来说,我的个人经验表明,尽管最初的冲动是 "fix" 通过缩小重复部分本身来减少重复性,但 通常 有更好的解决方案这将使您的代码不仅看起来更好,而且分解得更好。