私はジーンBelitskiによって優秀な本F# Design Patterns
でこのコードを見つけました:著者はこれがアクティブパターンがこのように動作するのはなぜですか?
「あなたはの結合を聞かせていることを覚えていれば明らかになり、わずかに遠くなるような気例であることを認識し
let (| `` I'm active pattern `` |) x = x + 2
let (`` I'm active pattern `` y) = 40
(*
val (|`` I'm active pattern ``|) : x:int -> int
val y : int = 42
*)
値は、データを逆アセンブルするパターンマッチングのコーナーケースです。したがって、I'm active pattern
が入力引数40に適用され、結果42がxにバインドされます。
私はそれを取得しません。 40が右側にあるので、I'm active pattern
が40に適用されるのはなぜですか?直感的に私は暗黙の関数として式let (`` I'm active pattern `` y) = 40
を見て、42ではなくy = 38と推測します。
誰でも説明できますか?
例OPでいくつかの出力への入力(例えば、Date to DateTimeなどの文字列)。 letはパターンマッチングであるため、このタイプの動作を取得します。これは、「let」でDUを分解するのと同様です。例えば。 'let(Foo x)= foo'はFoo DUにラップされた値を取り出します。 – s952163