Вы можете определить активный шаблон , который проверяет, находится ли значение внутри диапазона, указанного в качестве аргумента:
let (|InRange|_|) (min, max) v =
if v >= min && v <= max then Some () else None
Тогда вы можете определить insideBounds
следующим образом:
let insideBounds = function
| { x = InRange (0, 100); y = InRange (0, 100) } -> true
| _ -> false
Первый случай соответствует, когда оба члена x
и y
находятся в указанном диапазоне. Активный шаблон возвращает option unit
, что означает, что он не привязывает никаких значений. (0, 100)
является входным аргументом, и шаблон соответствует, когда значение (x
или y
) находится в диапазоне.
(В другом контексте `соответствует 10 с InRange (0