繁体   English   中英

如何将F#函数参数约束为PropertyGet?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM