Lay*_*lez 3 generics extension-methods f#
特别是,我想为这种类型编写一个扩展方法:
type Frame<'TRowKey, string when 'TRowKey : equality> with
member frame.someMethod =
// code
Run Code Online (Sandbox Code Playgroud)
使用该代码,我收到此错误:
类型名称中的意外标识符.预期的中缀运算符,引号或其他标记.
更换string用String的结果相同.
原始类型Frame<'TRowKey, 'TColumnKey (requires equality and equality)>来自Deedle库.
@Gustavo彻底解答了如何使用扩展方法.但是如果你没有特别强烈的理由将它作为扩展方法(比如C#interop),那么你可能会使用一个简单的函数:
type Frame<'row, 'col> = { row: 'row; col: 'col }
module Frame =
let restricted (frame: Frame<'row, string>) = frame
Frame.restricted { row = 3; col = "test" } // compiles
Frame.restricted { row = 3; col = 5 } // doesn't
Run Code Online (Sandbox Code Playgroud)
这就是我在编写F#-only代码时所考虑的更清晰的方法 - 当它们作为类型的内在部分没有意义时,let-bound函数优于方法,并且来自属性的噪声更少.
| 归档时间: |
|
| 查看次数: |
269 次 |
| 最近记录: |