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#思考了这么久,我完全没有想到。谢谢你帮我解决这个问题。