1
let empties = Array.create 100 []

値制限エラーが発生します: error FS0030: Value restriction. The value 'empties' has been inferred to have generic type val empties : '_a list []. Either define 'empties' as a simple data term, make it a function with explicit arguments or, if you do not intend for it to be generic, add a type annotation.

これはしませんが:

let makeArray () = Array.create 100 []

違いは何ですか?SOの質問には「あなたが試したこと」を含める伝統があることは知っていますが、何を試したらよいかさえわかりません。それは概念的な質問です...

4

1 に答える 1

1

コメント内のリンクは、ほとんどの質問を解決するはずです。しかし、このコードで何を達成したいのでしょうか? 100 個の空のリストの配列が必要ですか?

実際makeArray ()には と違いはありませんempties。実行すると、同じエラー メッセージが表示されます。

エラー FS0030: 値の制限。値 'it' はジェネリック型 val it を持つと推論されました: '_a list [] 'it' を単純なデータ項として定義するか、明示的な引数を持つ関数にするか、ジェネリックにするつもりがない場合は、型注釈を追加します。

これにより、100 個のリストの配列が作成されます。
let mkArr2<'a> = Array.create<'a list> 100

同様ですが、デフォルト値は0です(ただし、[]リストパラメーターは削除しました):
let mkArr3<'a> = Array.zeroCreate<'a> 100

そして最後に空の配列:
let mkArr4<'a> = Array.empty<'a>

または、従来の配列初期化構文を使用した次のようなものかもしれません。
let mkArr5<'a> = Array.init 100 (fun _ -> []:'a list)

特定の例では、ジェネリック型の注釈を追加するだけです。リスト/配列の配列が必要な場合は、'a listまたはを使用します。'a array
let empties<'a> = Array.create<'a> 100

于 2017-01-08T05:25:01.343 に答える