F# 为''|&燃气轮机;Seq.isEmpty |>;不是';

F# 为''|&燃气轮机;Seq.isEmpty |>;不是';,f#,F#,我只是想知道是否有更好的写作方式: |> Seq.isEmpty |> not 比如: |> not Seq.isEmpty 也许你喜欢 |> (not << Seq.isEmpty) |>(不是我可能会同意你目前的观点。这取决于上下文-当这是某个更大功能的结果时,我认为以下几点看起来不错: let someFunction () = someData |> Some pipeline |> Seq.isEmpty |>

我只是想知道是否有更好的写作方式:

|> Seq.isEmpty |> not
比如:

|> not Seq.isEmpty
也许你喜欢

|> (not << Seq.isEmpty)

|>(不是我可能会同意你目前的观点。这取决于上下文-当这是某个更大功能的结果时,我认为以下几点看起来不错:

let someFunction () = 
  someData
  |> Some pipeline
  |> Seq.isEmpty
  |> not
如果我是在其他上下文中编写的,我很可能会定义一个局部变量并编写如下内容:

let local =    
  someData
  |> Some pipeline
if not (Seq.isEmpty local) then 
  printfn "Not empty!"

@Carsten的答案中的想法也很好,但我会有点担心,对于不熟悉这种编码模式的人来说,它可能看起来很奇怪。在我看来,理解那里发生的事情并不容易。

我认为不是。相反,试着避免像
Seq.isEmpty
Seq.head
Seq.skip
这样的函数>等等,当他们破坏懒散或可能导致重复枚举的序列。
Seq.isEmpty
的原型实现如下

let isEmpty (xs : _ seq)=
    use en = xs.GetEnumerator()
    not <| en.MoveNext()
设为空(xs:uq)=
使用en=xs.GetEnumerator()
不