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
,因为它的性能比通用相等要好得多。
我在 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
,因为它的性能比通用相等要好得多。