F#の新しい2時間ですが、またはTimeSpan
のいずれかの差別化された結合型を宣言する方法を考えています。C#のためのFuncとTimeSpanの区別された連合
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))
私はのために怒鳴ら取得しています:この関数は、あまりにも多くの引数を取るか、機能が期待されていないコンテキストで使用されています。
ラムダをFuncOrTimeSpan.Func
に渡せるようにするにはどうすればよいですか?
また、Func of Func<DateTime, DateTime, Option<DateTime>
をFunc of DateTime -> DateTime -> Option<DateTime> -> Option<DateTime>
のように書き換える必要がありますか?私はこれが何を意味するのか分かりませんし、試してみると助けになりませんでした。
私はおそらくC#からこの関数とのインタフェースを考えているはずです(しかし、それとインタフェースする必要があるC#部分もF#に書き直されるため、interopを破るソリューションはまだ歓迎です)。
ActiveThingで何をしようとしていますか? –
'ActiveThing'は大丈夫です。それはmatch節のアクティブなパターンです。問題はありません。私は名前を思い出すことができなかったし、私がそれについて読むタブを見つけることができなかったので、それを 'ActiveThing'と呼んだ。私も間違って書き直しました、今編集されています。 –
@TomášHübelbauer部分的なアクティブパターンの構文が正しくないため、そこに問題があります。 https://msdn.microsoft.com/en-us/library/dd233248.aspx#Anchor_2を参照してください。 – TheInnerLight