Как уже сказал gradbot, единицы измерения F # используются только во время компиляции.К сожалению, вы не можете написать условие, что значения определенной единицы должны быть, например, больше нуля (это было бы довольно сложно проверить в компиляторе).
Поскольку единицы измерения также не существуют во время выполненияВы не можете написать универсальную функцию, которая измеряет любую температуру и проверяет, имеет ли значение единицу Kelvin
и меньше ли она нуля (а затем выдает исключение).Вам нужно было бы написать разные типы оболочки (например, TemperatureK
для значений типа float<Kelvin>
).
Лучшим вариантом может быть использование библиотеки, которая отслеживает единицы измерения во время выполнения.Затем вы можете получить модуль во время выполнения и выполнить проверку.Фил Трелфорд реализовал хорошую библиотеку единиц измерения времени выполнения , которую, возможно, стоит проверить.