4

在 F# 中,为什么我不能在此处访问 Array 上的“Item”成员:

let last (arr:System.Array) =
    let leng = arr.Length
    arr.[leng-1]   // Error: Field, constructor or member "Item" is not defined.
4

3 回答 3

5

你能试试这个吗?

let last (arr:_[]) =
       let leng = arr.Length
       arr.[leng-1]
于 2013-06-06T17:12:48.977 回答
3

这似乎是一个普遍的 dotnet 事情。查找我看到的文档

Array 类是支持数组的语言实现的基类。但是,只有系统和编译器可以显式地从 Array 类派生。用户应该使用该语言提供的数组结构。

于 2013-06-06T17:19:46.590 回答
1

另外,请注意,在 F# 中,您通常会使用不可变列表:

let last (stuff: _ list) =
    let l = stuff.Length
    stuff.[l]

但是如果你使用列表,你会使用更有效的算法;F# 列表是链表:

let rec last = function
    | hd :: [] -> hd
    | hd :: tl -> last tl
    | _ -> failwith "Empty list."
于 2013-06-06T22:18:32.080 回答