4

F# では、ここで配列の "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# では通常、不変の List を使用することに注意してください。

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 に答える