【问题标题】:Validate input with any function in a list使用列表中的任何函数验证输入
【发布时间】:2019-03-22 19:56:59
【问题描述】:

假设我想验证一个必须满足多个功能之一的输入。在 F# 中执行此操作的最佳方法是什么?这是我想出的一个小例子。

let funcs = 
            [
                fun x -> x % 2 = 0
                fun x -> x % 3 = 0
                fun x -> x % 5 = 0
            ]

let oneWorks x = funcs |> List.tryFind (fun f -> f x = true) |> Option.isSome

oneWorks 2 //true
oneWorks 3 //true
oneWorks 5 //true
oneWorks 7 //false

【问题讨论】:

  • 你所拥有的一切都很好,除了= true 位,这是多余的。
  • 你也可以使用List.exists来简化它,然后你就可以避免使用Option.isSome了。

标签: .net f# functional-programming composition function-composition


【解决方案1】:

正如 cmets 所说,您所拥有的一切都会正常工作。

不过,我会将其简化为:

let any x = funcs |> Seq.exists (fun f -> f x)

any 2 //true
any 3 //true
any 5 //true
any 7 //false

【讨论】:

  • 这很漂亮。
  • 这个问答是关于any的。 alllet all x = funcs |> Seq.forall (fun f -> f x) 非常相似。 anyall 都短路,防止不必要的工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多