[英]How to pass a single-dimensional array as an argument by reference if the size is unknown?
[英]How to create a single-dimensional, non-zero-based array in F#
我试图在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
请帮忙!
.NET通常不支持这些数组( http://msdn.microsoft.com/zh-cn/library/x836773a.aspx-感谢链接eis)。
但是,可以提供一种允许您使用F#语法的简单解决方案。
这是一个非常简单的例子
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])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.