2013-12-21 108 views
1

假設:擴展方法定義/調用在F#

存在着類型細胞在外部組件限定。

問題:

我已經創建了一個擴展方法爲類型:

module XlRow = 
    type Row with 
     member this.xlNewCell (row : Row) = 
      let cell = Cell() 
      //Manipulate cell... 
      cell 

此編譯沒有問題,據報道,有預期的簽名

row:Row -> Cell 

而且然而,當我試圖調用這樣的方法時,

let row = Row() 
let cell = row.xlNewCell() 

編譯器報告錯誤「類型'單元'與'行'類型不兼容。在另一方面,下面的語法成功,並且在執行時產生預期的新小區:

let row = Row() 
let cell = row.xlNewCell(row) 

這是因爲如果編譯器沒有看到「隱this指針」與擴展方法一起去;但它似乎被認爲是某種「擴展方法」,因爲我可以用''來稱呼它。符號。這裏發生了什麼?

回答

4

F#擴展方法與C#擴展方法的工作方式不同。你並不需要通過this參數聲明方法時,它是由this.符號來完成:

type Row with 
    member this.xlNewCell() = 
     // ... 
+0

是啊,我已經在C#中思考這麼久,我完全錯過了。感謝您幫助我解決它。 – 3Sphere