[英]How to constrain F# function argument to PropertyGet?
我有一些可以接受表达式并可以正常使用的代码; 麻烦是,我传递的表达式是PropertyGet的约束是运行时约束,而不是编译时约束:
member x.f(propertyExpr) =
match propertyExpr with
| PropertyGet(_, propOrValInfo, _) -> () // do something
| _ -> failwith "Unexpected expression type; needs PropertyGet"
我真正想要的是在编译时限制表达式的类型。 以下说明了我的意图:
member x.f(propertyExpr: Expr.PropertyGet) =
() // do something
当然,这不会编译。 所需的属性是:编译时检查-更安全,而且我担心的异常更少。 但是如何到达那里?
那是不可能的。 F#中的有区别的联合,即使它们被编译成一个类层次结构,也不允许将用例用作适当的类型。 在Scala中,案例类也可以做到这一点,但是我相信任何ML派生语言都不允许这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.