2015-06-15 54 views
0

我在F#中定義的運營商定製這樣的默認值:F#自定義操作符,返回

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

運營商是一個類型中定義,應該叫在以下情況下 :
我使用WMI檢索有關係統處理器的信息。
現在我想獲得VoltageCaps屬性,但是因爲那可能是空的,我想在這種情況下分配一個默認值。

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

Visual Studio中告訴我:「類型‘OBJ’不支持操作‘&?’」

我失去的東西在這裏或者是運營商本身有缺陷?

回答

4

您的運營商採用類型爲obj的參數,因此您應該將其定義爲獨立功能,而不是類型成員。

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

現在你可以這樣做:

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

我改成了模式匹配null由於不是一般的平等更好的性能。