2015-07-21 52 views
0

我有一個使用下面的聲明,但沒有初始化類成員的F#類:F#檢查如果val成員未初始化

[<DefaultValue>] val mutable myVariable : myType 

我怎麼可以在代碼檢查該值是否已初始化?我試過:

x.myVariable = null 

但這似乎並不奏效。

+0

在F#中不會使用'option'這樣的東西更具慣用性嗎? – vcsjones

+0

是的。但我仍然在問。 – user3685285

+0

看起來像'myType'這裏是一個值類型,所以它不會爲空,你可以比較'Unchecked.defaultof '但它有可能被初始化爲默認值,所以就像@vcsjones說它會很好在這裏使用'option' –

回答

1

從你的描述中,很難說出你實際想要達到的目標 - 使用未初始化的值和繼承通常不是F#中的首選方式(但它們有時對於互操作性而言是必需的.NET),所以如果你遵循這個方向,你可能沒有從使用F#中獲得很多優勢。

以下不會爲你工作嗎?我們的想法是,我們定義一個基類,它的私人物品的價值,通過構造函數:

type Base(myThing : Random) = 
    member x.MyThing = myThing 

而且繼承的類可以再提供價值,而且使用的成員訪問:

type MySubclass() = 
    inherit Base(new Random(0)) 
    member x.Next() = 
    x.MyThing.Next()