【发布时间】:2010-09-09 22:54:26
【问题描述】:
我需要实现一个静态扩展方法,支持对一些基本基本类型(如整数、浮点数等)的成员约束。这是我的有符号整数代码:
module MyOperators =
let inline foo (x : ^T) = (^T : (static member Foo : ^T -> int) (x))
type System.Int32 with
static member Foo(x : Int32) = 7 // static extension
测试代码:
open MyOperators
let x = foo 5 // x should be 7
但是编译器报错:
“System.Int32”类型不 支持任何名为 'Foo' 的运算符
我在这里缺少什么?谢谢!
【问题讨论】:
-
如果我对你的理解正确的话,我认为即使你能做到这一点,这也不是一个特别好的主意。修补基本的语言机制总是让我觉得是一种反模式。想一想这样一个事实,除了您之外的其他人可能在未来的某个时候必须处理此代码。当您有一段时间没有使用它时,您甚至可能不得不在将来的某个时候自己维护此代码。对内在类型的修改可能会导致几个“WTF?”时刻。
标签: f# extension-methods type-constraints