Ich bin etwa 2 Stunden neu zu F # und habe einige Probleme herausfinden, wie man eine diskriminierte Union Typ, der entweder Func<DateTime, DateTime, Option<DateTime>, Option<DateTime>>
oder TimeSpan
sein kann.Discriminated Union of Func und TimeSpan für C#
namespace Test
open System
type FuncOrTimeSpan =
// Should this be written in a different way to be able to take fun (a, b, c) -> ...?
| Func of Func<DateTime, DateTime, Option<DateTime>, Option<DateTime>>
| TimeSpan of TimeSpan
module ThingDoer
let (|ActiveThing|_|) input = Option.Some(1)
// Do I need to tell this function that I expect it to return FuncOrTimeSpan?
let ReturnEitherFuncOrTimeSpan input =
match input with
| "should return TimeSpan" -> FuncOrTimeSpan.TimeSpan(TimeSpan.FromSeconds(10))
| ActiveThing number -> FuncOrTimeSpan.Func(fun (a, b, c) -> Option.Some(DateTime.Now))
Ich bin immer an für schreit: Diese Funktion zu viele Argumente übernimmt oder in einem Kontext verwendet, bei denen Funktion ist nicht zu erwarten.
Was kann ich tun, damit ich das Lambda an die FuncOrTimeSpan.Func
weitergeben kann?
Auch sollte ich Func of Func<DateTime, DateTime, Option<DateTime>
zu etwas wie Func of DateTime -> DateTime -> Option<DateTime> -> Option<DateTime>
umschreiben? Ich habe keine Ahnung, was das bedeutet und es hat nicht geholfen, als ich es versuchte.
Ich sollte wahrscheinlich beachten, dass ich vorhabe, mit dieser Funktion von C# zu verbinden (aber vielleicht wird der C# -Teil, der damit verbunden werden sollte, auch in F # umgeschrieben, so dass Interop-Lösungen immer noch willkommen sind).
Was versuchen Sie mit ActiveThing? –
'ActiveThing' ist in Ordnung, es ist nur ein aktives Muster für die Übereinstimmungsklausel, kein Problem dort. Ich habe es 'ActiveThing' genannt, weil ich mich nicht an den Namen erinnern konnte und den Tab nicht finden konnte, wo ich darüber gelesen habe.Ich habe es auch falsch umgeschrieben, es ist jetzt bearbeitet. –
@ TomášHübelbauer Es gibt ein Problem dort, weil diese Syntax für eine teilweise aktive Muster nicht korrekt ist. Siehe https://msdn.microsoft.com/en-us/library/dd233248.aspx#Anchor_2 – TheInnerLight