Я пытаюсь сопоставить шаблон с исключением в его определении. Возможно ли что-то подобное следующему с использованием синтаксиса исключений F #, или я должен подкласс Exception
?
Это то, что я ожидал работать:
exception CoordErr of int * int
with
override this.Message =
let CoordErr(x, y) = this
sprintf "(%i %i)" x y //ERROR
Но выдает ошибки:
Значение или конструктор 'x' не определены
Значение или конструктор 'y' не определены
EDIT
Я также пытался добавить парены:
let (CoordErr(x, y)) = this
Но это дает ошибку:
Ожидается, что это выражение будет иметь тип exn, но здесь имеет тип CoordErr
UPDATE
Следующее работает, но не идеально:
exception CoordErr of int * int
with
override this.Message =
sprintf "(%i %i)" this.Data0 this.Data1
Есть ли другой способ сделать это?
ОБНОВЛЕНИЕ 2
Исходя из ответа kvb, я полагаю, что мог бы сделать следующее, чтобы проглотить предупреждение incomplete matches
:
exception CoordErr of int * int
with
override this.Message =
match this :> exn with
| CoordErr(x, y) -> sprintf "(%i %i)" x y
| _ -> Unchecked.defaultof<_>