Я хотел бы написать функцию F #, которая принимает общее значение перечисления и, скажем, удваивает его базовое целочисленное значение. К счастью, есть встроенная функция, называемая int
, которая преобразует перечисление в целое число, поэтому это должно быть легко, не так ли? Вот моя первая попытка:Ограничение типа F # с типом Enum
let doubler (value : 't when 't : enum<int>) =
2 * (int value)
К сожалению, это приводит следующие сообщения компилятора:
Program.fs (2,10): предупреждение FS0064: Эта конструкция вызывает код быть меньше общего, чем обозначенных аннотациями типа. Переменная типа 't была ограничена типом' int '.
Program.fs (2,10): error FS0071: Несоответствие ограничения типа при применении по умолчанию типа 'int' для переменной ввода типа. Тип 'int' не является типом перечисления CLI. См. Также Program.fs (1,28) - (1,42). Рассмотрим , добавив дополнительные ограничения типа
Что я делаю неправильно? Есть ли лучший способ извлечь базовое целое из общего значения перечисления в F #?
Что означает 'enum', это преобразование значения в его представление. Компилятор предоставит вам ограничение. Смотри ниже. – s952163