在F#中,为什么我不能在这里访问数组上的“Item”成员:
let last (arr:System.Array) =
let leng = arr.Length
arr.[leng-1] // Error: Field, constructor or member "Item" is not defined.
答案 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."