1

我正在尝试在 fsharp 中编写一个简单的函数来检查营业时间,但它不起作用。

这就是我所拥有的:

let businessdate dts =
    let newdts = DateTime.FromOADate dts
    match newdts with
    | not DayOfWeek.Saturday & not DayOfWeek.Sunday & DateTime.Hour >= 8 & DateTime.Hour <= 20 -> 1
    | _ -> 0

这失败了。Fsharp 中的 DateTime 是否有可能没有会员小时?请问我该怎么做?

4

1 回答 1

9

您的代码段的问题在于您以一种有点奇怪的方式使用模式匹配。您不能完全将任意代码放入match子句的模式中 - 您可以使用常量(如DayOfWeek.Saturday)来检查一个值是否等于某个值,或者您可以使用带有when子句的变量赋值来检查条件:

let businessdate dts =
    let newdts = DateTime.FromOADate dts
    // Match on day of week and hour properties of the date time
    match newdts.DayOfWeek, newdts.Hour with
    // For weekend, return false
    | DayOfWeek.Saturday, _ | DayOfWeek.Sunday, _ -> false
    // For working hours, return true
    | _, h when h >= 8 && h <= 20 -> true
    // For non-working weekday hours, return false
    | _ -> false

您可以通过使用活动模式使这更好一点,但这是一个更高级的功能,所以我建议您在熟悉基本模式后稍后再研究它。

PS:实际上,由于银行假期之类的原因,这可能行不通,但我想这不是您问题的重点。

于 2013-10-03T18:09:55.133 回答