在 F# 中,为什么我不能在此处访问 Array 上的“Item”成员:
let last (arr:System.Array) =
let leng = arr.Length
arr.[leng-1] // Error: Field, constructor or member "Item" is not defined.
你能试试这个吗?
let last (arr:_[]) =
let leng = arr.Length
arr.[leng-1]
这似乎是一个普遍的 dotnet 事情。查找我看到的文档
Array 类是支持数组的语言实现的基类。但是,只有系统和编译器可以显式地从 Array 类派生。用户应该使用该语言提供的数组结构。
另外,请注意,在 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."