我正在嘗試爲F#元組創建一個類型擴充方法。此代碼編譯就好:是否有可能爲F#元組創建擴展方法
type System.Tuple<'a, 'b> with
member this.ToParameter name =
match this with
| this -> sprintf "%s=%O,%O" name (this.Item1, this.Item2)
然而,當我嘗試調用這個方法:
printfn "%s" (("cat", 2).ToParameter("test"))
我得到一個錯誤說「該字段,構造函數或成員‘ToParameter’沒有定義」。在解釋,下列詞語報告其類型爲某種形式的System.Tuple'2的:
typedefof<'a * 'b>.FullName
(1, 2).GetType().FullName
在Visual Studio中,如果我將鼠標懸停在表達:
let a = 1, 2
它報告int * int類型。當我嘗試增加這種類型或者它的通用等價物時,'a *'b,我得到一個錯誤。
是否有可能爲F#元組創建通用擴充?
使此擴展方法(而不是函數)的任何特定原因? – pblasucci 2013-02-24 11:55:12
我想能夠在可能的類型上調用ToParameter。我有擴充工作IEnumerable <'a>,字符串和其他。要創建一個可以處理所有這些類型的函數,我將不得不求助於拳擊和反射。我可以爲每種類型創建一個不同的方法,但是這會使API不易讀。 – 2013-02-24 19:04:30
爲什麼不只是用重載的方法創建一個類型 - 那麼你只需要'utils.ToParameter(t)'而不是't.ToParameter()'這看起來沒問題 – 2013-02-24 21:04:01