return 默认值的 F# 自定义运算符

F# Custom operators that return default value

我在 F# 中定义了一个自定义运算符,如下所示:

static member (&?) value defaultValue =
    if value = null then
        defaultValue
    else
        value

运算符是在类型中定义的,应该调用 在以下情况下:
我正在使用 WMI 检索有关系统处理器的信息。
现在我想获取 VoltageCaps 属性,但由于它可能为空,因此我想在这种情况下分配一个默认值。

let voltage = (m.["VoltageCaps"] &? (0 :> obj))

Visual Studio 告诉我 "The type 'obj' does not support the operator '&?'"

我是不是遗漏了什么,还是操作员本身有问题?

您的运算符接受一个 obj 类型的参数,因此您应该将其定义为独立函数,而不是类型成员。

let (&?) (value:obj) (defaultValue:'a) =
    match value with
    | null -> defaultValue
    | _ -> unbox value

现在您可以这样做了:

let voltage = m.["VoltageCaps"] &? 0

我将其更改为模式匹配 null,因为它的性能比通用相等要好得多。