2017-03-29 11 views
3

Deedleで機能Series.hasNotのヘルプは言う:Series.hasにバグがありますか?

Returns true when the series does not contains value for the specified key

機能は、次の例では、このように動作していないようです:

let election = 
      [ "Party A", 304 
       "Party B", 25 
       "Party C", 570 
       "Party Y", 2 
       "Party Z", 258 ] 
      |> series 
let bhnt = 
    election 
    |> Series.hasNot "Party A" 
printfn "%A" <| bhnt 
// true 
// val bhnt : bool = true 
// val it : unit =() 

私は何かが足りないのですか?

+1

Deedleでこのバグが修正されるまでは、私が使用できる回避策で私のコメントを更新しました。 – rmunn

答えて

5

私はちょうどDeedle sourceを見て、次のことを見た:

let has key (series:Series<'K, 'T>) = series.TryGet(key).HasValue 
let hasNot key (series:Series<'K, 'T>) = series.TryGet(key).HasValue 

はい、あなたはバグを発見しました。 hasNot関数はnot (series.TryGet(key).HasValue)のようになります。

回避策:このバグが修正されるまで、あなたがSeries.has keyによって、あなたのコード内でSeries.hasNot keyの出現をすべて置き換え、その後not機能を通すことによって、それを回避することができます。例えば、

let bhnt = 
    election 
    |> Series.has "Party A" 
    |> not 

それとも、あなたはそれが良く見えると思うなら、あなたはまた、ことを書くことができます:

let bhnt = 
    election 
    |> (not << Series.has "Party A") 

それを書いているこれらの2つの方法が同等です。どちらを使用するのが好きなのかは、関数型プログラミングの快適さにかかっています。一部の人々は<<の構文をより自然に読むことができますが、他の人は完全に変わっており、|>だけを使用したいと思っています。それは関数型プログラミングの経験にどのくらい依存しているかによって異なります。これらの2つのうちどれがあなたにとって最も自然なものかを選んでください。

+2

このバグを修正するためにhttps://github.com/BlueMountainCapital/Deedle/pull/361を送信しました。 – rmunn

+0

修正を送信していただきありがとうございます!私は何がCIに間違っているのかを把握し、それを統合する必要があります! –

関連する問題