對於內聯函數一個可以創建一個約束,如:活動模式和成員約束
let inline implicit arg =
(^a : (static member op_Implicit : ^b -> ^a) arg)
需要的參數給定的運營商或成員。有沒有一種方法可以基於類似的東西進行匹配?
我想創建一個活躍的格局,其中則傳遞給內聯函數如上述的約束相匹配的方法,任何參數觸發功能和一切爲一些錯誤管理的一部分結束。
對於內聯函數一個可以創建一個約束,如:活動模式和成員約束
let inline implicit arg =
(^a : (static member op_Implicit : ^b -> ^a) arg)
需要的參數給定的運營商或成員。有沒有一種方法可以基於類似的東西進行匹配?
我想創建一個活躍的格局,其中則傳遞給內聯函數如上述的約束相匹配的方法,任何參數觸發功能和一切爲一些錯誤管理的一部分結束。
看起來你可以編寫內聯活動模式了。我以前沒有使用過,但現在我嘗試了它,它似乎工作得很好。
let inline (|Test|_|) (a:^T) : option<^R> =
(^T : (member Test : unit -> option<^R>) a)
現在,您可以定義定義Test
方法的一些對象,並使用模式匹配他們:
type A() =
member x.Test() = Some(10)
match new A() with
| Test(n) -> printfn "%d" n
| _ -> printfn "failed"
這將Test
模式下面可以實現Test
方法,返回option<^R>
任何對象使用看起來像一個非常有趣的技術,因爲模式匹配現在是對象的一部分。
我認爲你必須使用反射,如有一個函數,它o:obj
,然後反映了o.GetType()
的成員。