Могут ли дискриминированные союзы относятся друг к другу?
-
27-09-2020 - |
Вопрос
Я строю дерево выражения с использованием различных профсоюзов.Ниже приведен код:
type IntExpression =
| TrueIsOne of BoolExpression
type BoolExpression =
| LessThan of IntExpression * IntExpression
| And of BoolExpression * BoolExpression
| Or of BoolExpression * BoolExpression
| Bool of bool
.
бросает ошибку, потому что буолекс не определена.Обмен определениям только приводит к обратному (Intexpression не определено), как вы ожидаете.
Есть ли путь вокруг этого?
Решение
Да, используйте and
к определениям групповых типов с межконечными зависимостями:
type IntExpression =
| TrueIsOne of BoolExpression
and BoolExpression =
| LessThan of IntExpression * IntExpression
| And of BoolExpression * BoolExpression
| Or of BoolExpression * BoolExpression
| Bool of bool
. Другие советы
"и" работает как правило, для типов с взаимными зависимостями.То есть он работает для всех типов, таких как дискриминированные союзы, как показано, что Mau, классы, записи и взаимно рекурсивные функции.
Не заканчивающий пример:
let rec foo x = bar x
and bar x = foo x
. Возможно, это будет работать:
type IntExpression =
...
and BoolExpression =
...
.
(информация, взятая из Эта страница на MSDN ./ P >.
Не связан с StackOverflow