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 に答える