我想编写一个F#函数,它接受一个通用的枚举值,并将其基础整数值加倍。幸运的是,有一个名为int
的内置函数可以将枚举转换为整数,因此这应该很容易实现,对吧?这是我的第一次尝试:
let doubler (value : 't when 't : enum<int>) =
2 * (int value)
很不幸,这导致以下编译器消息:
我做错了什么?在F#中有更好的方法从泛型枚举值中提取底层整数吗?Program.fs(2,10): 警告 FS0064: 这个结构使代码比类型注释所示的更不通用。类型变量't已被限制为类型'int'。
Program.fs(2,10): 错误 FS0071: 应用类型推断变量的默认类型'int'时出现类型约束不匹配。类型'int'不是CLI枚举类型。请参见Program.fs(1,28)-(1,42)。考虑添加进一步的类型约束
enum
的作用是将一个值转换为其表示形式。编译器会为您添加约束条件。请参见下文。 - s952163