3
我發現通過基因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。「
我不明白。爲什麼I'm active pattern
被應用到40,因爲40在右側?直覺上,我猜測y = 38,而不是42,將表達式let (`` I'm active pattern `` y) = 40
看作隱式函數。
任何人都可以解釋一下嗎?
在OP的示例是有點做作但這種類型的有源圖案的通常用在轉換中使用一些輸出的一些輸入(例如字符串日期到DateTime等)。因爲讓模式匹配,你會得到這種類型的行爲。這與使用'let'解構DU相似。例如。 'let(Foo x)= foo'將取出包裝到Foo DU中的值。 – s952163