首页 文章

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

提问于
浏览
-1

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

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

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

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

Error:

从“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 回答

  • 3

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

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

相关问题