2013-06-07 13 views
6

In questo previous question ho appreso che in F # uno array<'T> non corrisponde a System.Array.F # - Cos'è l'array <'T>?

VS indica che array<'T> eredita System.Array e ha il nome completo Microsoft.FSharp.Core.array<_> e alcune interfacce aggiuntive.

Tuttavia MSDN indica che array<'T> è un tipo di abbreviazione di System.Array. E che ha la notazione arr.[i] per ottenere e impostare gli elementi.

Quindi per la mia lezione, è array<'T> un'abbreviazione di tipo che include estensioni di tipo e interfacce aggiuntive? Dov'è il posto migliore per cercare questo?

risposta

10

Il tipo array<'T> è un'abbreviazione, ma non per il tipo base System.Array ma per un altro tipo generico che rappresenta gli array in F #, che è scritto come 'T[].

Questo significa che

  • System.Array è il tipo di base non generico (dove non è possibile utilizzare l'indicizzazione e si può ottenere solo gli elementi come oggetti)

  • 'T[] e array<'T> significa esattamente la stessa cosa . Sono il tipo generico che supporta l'indicizzazione e ottieni i valori 'T da esso.

+1

Si noti inoltre che i tipi generici possono essere scritti prima del tipo e senza parentesi angolari, quindi è possibile scrivere, ad esempio, 'stringa array' che legge molto bene; molto più bello di 'array ' o 'stringa []'. – Jwosty

+0

come posso creare estensioni di tipo su '[]'? 'tipo Microsoft.FSharp.Collections.Array con arr .last membro con get() = arr. [arr.Length -1]' non funziona per me – Goswin

+0

per estensione di tipo vedi: http://stackoverflow.com/questions/18359825/f-how-to-extended-the-generico-array-type – Goswin

Problemi correlati