如何指定Query
的成员FilterConditions
的类型,从而通过Expr
的BoolExpr
来限制其类型>?
type Expr =
| BoolExpr of Expr
| ConstValue of Object
| FieldAccess of string
type Query = {
SelectList: Expr list
FilterConditions: Expr.BoolExpr list // Expr.BoolExpr - this is don't valid? why?
}
我想仅通过 Expr
的 BoolExpr
来限制 FilterConditions 的类型。是否可以?或者我必须重新设计 AST 的结构?...
最佳答案
联合类型的目的是提供对不同类型的统一访问。 知道这一点后,根据您的分析,您有几种选择:
如果您确实觉得一个案例有自己的生命,您可以为它创建一个类型并将其包装在联合案例中
您可以在使用 Query 类型的函数中进行模式匹配,并使用统一的 Expr 类型作为参数。在这种情况下,这似乎是一件好事。
关于f# - 我可以使用可区分联合的分支来指定记录类型的成员吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16303078/