1

我试图在 F# 中创建一个单维、非从零开始的数组。我需要这样的数组来与用另一种编程语言编写的代码进行互操作。Array2D.createBased 函数旨在创建二维、非从零开始的数组,但 F# 语言缺少 Array.createBased 函数来创建一维、非从零开始的数组。所以,我尝试编写自己的函数,但它不起作用。它的代码在这里:

let createBased base1 length1 (initial : 'a) =           
       // the problem is here: System.Array ('a [*]) is not convertible to array ('a []), 
       // so InvalidCastException error is raised at run-time
       let A = Array.CreateInstance (typeof<'a>, [| length1 |], [| base1 |]) :?> 'a [] 

       for i in A.GetLowerBound(0) .. A.GetUpperBound(0) do A.[i] <- initial 
       A

请帮忙!

4

1 回答 1

1

.NET 通常不支持这些数组(http://msdn.microsoft.com/en-us/library/x836773a.aspx - 感谢链接 eis)。

但是,可以提供一个允许您使用 F# 语法的 hackish 解决方案。

这是一个非常简单的例子

open System
type Hack() =
    let A = Array.CreateInstance (typeof<int>, [| 5 |], [| 5 |])
    member x.Item with get(y:int) = A.GetValue(y) and set (v:int) (y:int) = A.SetValue(y,v)

let a = new Hack()
printfn "%A" (a.[8])
a.[8]<-1
printfn "%A" (a.[8])
于 2013-04-12T10:58:35.677 回答