繁体   English   中英

如何在有歧视联盟案例的实际容器上进行模式匹配?

[英]How do I Pattern Match on the actual container of Discriminated Union cases?

出于好奇,我如何在已区分的工会案件的实际容器中进行模式匹配?

具体来说,如何知道某个值是否为特定类型?

我尝试使用模式构造(即:?):

let isVehicle = fun a -> match a with
                         | :? Vehicle -> "Is a vehicle"
                         | _          -> "Is NOT a vehicle"

错误:

从'a类型到Vehicle的运行时强制或类型测试涉及一个不确定的类型,该类型基于此程序点之前的信息。 在某些类型上不允许运行时类型测试。 需要进一步的类型注释。

这是完整的代码:

type Vehicle = 
    | Car
    | Tank
    | Helicopter

let move = function
    | Car        -> "wheels spin"
    | Tank       -> "tracks roll"
    | Helicopter -> "Blades spin"

let isVehicle = fun a -> match a with
                         | :? Vehicle -> "Is a vehicle"
                         | _          -> "Is NOT a vehicle"

您应该在lambda参数中添加类型注释:

let isVehicle = fun (a:obj) -> match a with
                               | :? Vehicle -> "Is a vehicle"
                               | _          -> "Is NOT a vehicle"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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