F# F中的扩展方法定义/调用#

F# F中的扩展方法定义/调用#,f#,extension-methods,F#,Extension Methods,假设: 存在外部程序集中定义的类型行和单元格 问题: 我已经为行类型创建了一个扩展方法: module XlRow = type Row with member this.xlNewCell (row : Row) = let cell = Cell() //Manipulate cell... cell 此文件编译无问题,并报告具有预期的签名 row:Row -> Cell 然而,当我尝

假设:

存在外部程序集中定义的类型单元格

问题:

我已经为类型创建了一个扩展方法:

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()
编译器报告错误“类型'unit'与类型'Row'不兼容”。另一方面,以下语法成功,并在执行时生成预期的新单元格:

let row = Row()
let cell = row.xlNewCell(row)
这就好像编译器没有看到扩展方法附带的“隐式this指针”;但它似乎被认为是“扩展方法”“某种程度上,我可以用“.”符号来称呼它。这里发生了什么?

F#扩展方法与C#扩展方法的工作方式不同。声明方法时不需要传递
this
参数,它是通过
this来完成的。
表示法:

type Row with
    member this.xlNewCell() =
        // ...
F#扩展方法的工作方式不同于C#扩展方法。声明方法时不需要传递
this
参数,它是通过
this来完成的。
表示法:

type Row with
    member this.xlNewCell() =
        // ...
是的,我用C#思考了这么久,我完全错过了。谢谢你帮我解决这个问题。是的,我用C#思考了这么久,我完全没有想到。谢谢你帮我解决这个问题。