如何在Discriminated Union案例的实际容器上模式匹配?

时间:2016-04-06 13:08:45

标签: f#

出于好奇,我如何在受歧视的工会案件的实际容器上进行模式匹配?

具体来说,我怎么知道某个值是否属于特定类型?

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

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

错误:

  

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

以下是整个代码:

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"

1 个答案:

答案 0 :(得分:3)

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

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