2015-11-27 39 views

回答

5

也許你喜歡?

|> (not << Seq.isEmpty) 
+0

謝謝,它更好 – demas

2

我可能會用你現在擁有的東西去。這取決於上下文 - 當這是一些較大的函數的結果,我覺得有以下看起來不錯:

let someFunction() = 
    someData 
    |> Some pipeline 
    |> Seq.isEmpty 
    |> not 

如果我在其他一些情況下寫這個,我將最有可能定義一個局部變量並編寫是這樣的:

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

在@卡斯滕的回答也很不錯,但我會有點擔心,它可能看起來怪異的人誰不熟悉這種編碼模式的想法。瞭解發生了什麼並不是很容易,在我看來。

0

我不會說。相反,儘量避免像Seq.isEmptySeq.head,Seq.skip等功能時,他們破壞了懶惰或可能導致重複列舉的序列。 的原型實施Seq.isEmpty也能像

let isEmpty (xs : _ seq)= 
    use en = xs.GetEnumerator() 
    not <| en.MoveNext() 

從中可以看出,除了其創作(處置)枚舉有一次推進本身。如果你發現它不是空的,那麼當你以後將會重複使用這個序列。

這可以通過緩存來緩解(Seq.cache),但是如果序列仍然是當前任務的正確數據結構,您可能會問。

相關問題