为什么我不能用null初始化mutable类型?

cnd*_*cnd 1 f#

我尝试着:

let mutable ncon : NCon = null
Run Code Online (Sandbox Code Playgroud)

得到:

Error   1   The type 'NCon' does not have 'null' as a proper value
Run Code Online (Sandbox Code Playgroud)

其中type以这种方式声明

type NCon(settings : ISettings) = ...
Run Code Online (Sandbox Code Playgroud)

我打算将它用作静态属性,稍后当用户完成设置时启动它,那么我做错了什么?为什么我不能用null初始化mutable类型?

我必须使用选项吗?所以要使它成为无或有些?

Car*_*ten 6

您必须向NCon-Type 提供AllowNullLiteral,如下所示:

[<AllowNullLiteral>]
type NCon(settings : ISettings) = ...
Run Code Online (Sandbox Code Playgroud)

这是因为F#阻止你使用Null ...这不是一个坏主意恕我直言

对于你的其他问题:是的我宁愿使用一个选项 - 我也会考虑使用ref-cell - 但这取决于你想用它做什么.

  • 另一个选项是`Operators.Unchecked.Defaultof <_>`,它给出给定类型的最佳允许近似值为null (2认同)