Series.hasNot中是否有错误?

时间:2017-03-29 00:00:40

标签: f# series deedle

Series.hasNot中功能Deedle的帮助说:

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 个答案:

答案 0 :(得分: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.hasNot key替换代码中所有出现的Series.has key然后通过{{1功能。如,

not

或者,如果您认为它看起来更好,您也可以将其写为:

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

这两种写作方式是等价的;您喜欢使用哪一个取决于您对功能编程的舒适程度。有些人发现let bhnt = election |> (not << Series.has "Party A") 语法更自然易读,而其他人则认为它非常奇怪,并且只想坚持使用<<。这一切都取决于你对函数式编程的经验;选择这两者中哪一个对你来说最自然。