我应该使用Nullable<'a>或选项<'a>在F#?

时间:2013-10-02 03:16:47

标签: f#

使用Nullable<'a>的方式更为惯用。或使用选项<'a>用于表示可为空的int?

2 个答案:

答案 0 :(得分:5)

选项在F#代码中更为惯用。

match中使用时,它具有更好的语法,并且具有标准库的大量支持。

但是,如果您计划从C#或其他语言访问代码,则应该使用Nullable公开接口,这在C#中更容易使用。

答案 1 :(得分:5)

正如约翰所说,Option<T>绝对是F#中惯用的类型。我肯定会使用选项作为我的默认选择 - Option模块提供了许多有用的功能,模式匹配很好地适用于选项,而F#库通常用于处理选项。

那就是说,有两种情况你可能想要使用nullable:

  • 创建可选值数组时,Nullable<T>是值类型(排序),如果创建数组Nullable<T>[],则将其分配为连续内存块。另一方面,选项是引用类型,option<T>[]将是对堆分配对象的引用数组。

  • 当您需要编写一些计算并传播缺失值时 - 在F#3.0中,有一个模块Microsoft.FSharp.Linq.NullableOperators,它实现了各种运算符来处理可为空的值(参见MSDN documentation)你写的是:

    let one = Nullable(1)
    let two = Nullable(2)
    
    // Add constant to nullable, then compare value of two nullables
    (one ?+ 2) ?>=? two