声明在F#中返回2D数组的函数的语法

时间:2011-12-03 15:40:26

标签: syntax f# multidimensional-array option

我需要在F#中声明一个带有2个参数(row,col)的函数,并返回一个2维的Option数组(将所有元素初始化为none),但我不知道正确的语法。我尝试过类似的东西:

type T = 
  {
   ....//my type
  }

let create2DArrayOfT (row : int , col: int) Array2D<Option<T>> = Array2D.init<Option<T>> 10 10 (fun -> None)

上面的签名在指定返回类型时是错误的。 所以我有两个问题:

  1. 将返回类型指定为二维数组的正确签名是什么?
  2. 我已经尝试对我的数组元素使用Option,因为我希望它允许某些位置为空。这合理吗?

3 个答案:

答案 0 :(得分:4)

在F#中写入'a [,]的2D数组的类型。下一次,您可以通过查看Array2D模块中的函数类型,使用F#interactive找到它:

> Array2D.create;;
val it : (int -> int -> 'a -> 'a [,]) = <fun:clo@4>

答案 1 :(得分:3)

您不需要指定返回类型,因为它将通过类型推断推断出来。 只需使用:

type T = {Name : string}
let create2DArrayOfT (row : int , col: int) = Array2D.init<Option<T>> 10 10 (fun _ _ -> None)

<强>更新

如果要指定返回类型,请使用:

let create2DArrayOfT (row : int , col: int) : Option<T> [,] = Array2D.init<Option<T>> 10 10 (fun _ _ -> None)

答案 2 :(得分:1)

let create2DArrayOfT<'T> (row : int , col: int) : 'T option [,] = Array2D.init<'T option> row col (fun _ _ -> None)

注释遗漏

let create2DArrayOfT<'T> (row, col) = Array2D.init<'T option> row col (fun _ _ ->None)

用法:

let a = create2DArrayOfT<T>(2,3)