2013-12-21 86 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