F#,为什么我不能访问“Item”成员

时间:2013-06-06 17:05:49

标签: arrays f#

在F#中,为什么我不能在这里访问数组上的“Item”成员:

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

3 个答案:

答案 0 :(得分:5)

你能试试吗?

let last (arr:_[]) =
       let leng = arr.Length
       arr.[leng-1]

答案 1 :(得分:3)

这似乎是一个普通的dotnet事情。查看documentation我看到了

  

Array类是语言实现的基类   支持数组。但是,只有系统和编译器才能派生出来   显式来自Array类。用户应该使用该阵列   语言提供的结构。

答案 2 :(得分:1)

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

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

但如果您使用的是列表,则使用more efficient algorithm; F#列表是链表:

let rec last = function
    | hd :: [] -> hd
    | hd :: tl -> last tl
    | _ -> failwith "Empty list."