F # - Strutture

Una struttura in F # è un tipo di dati di tipo valore. Ti aiuta a creare una singola variabile, conservare i dati correlati di vari tipi di dati. Ilstruct la parola chiave viene utilizzata per creare una struttura.

Sintassi

La sintassi per definire una struttura è la seguente:

[ attributes ]
type [accessibility-modifier] type-name =
   struct
      type-definition-elements
   end
// or
[ attributes ]
[<StructAttribute>]
type [accessibility-modifier] type-name =
   type-definition-elements

Esistono due sintassi. La prima sintassi viene utilizzata principalmente, perché, se usi l'estensionestruct e end parole chiave, puoi omettere il StructAttribute attributo.

Gli elementi di definizione della struttura forniscono:

  • Dichiarazioni e definizioni dei membri.
  • Costruttori e campi mutabili e immutabili.
  • Membri e implementazioni dell'interfaccia.

A differenza delle classi, le strutture non possono essere ereditate e non possono contenere legami let o do. Da allora, le strutture non hanno lasciato legami; è necessario dichiarare i campi nelle strutture utilizzando ilval parola chiave.

Quando si definisce un campo e il suo tipo utilizzando valparola chiave, non è possibile inizializzare il valore del campo, ma vengono inizializzati a zero o null. Quindi, per una struttura con un costruttore implicito, ilval le dichiarazioni devono essere annotate con il DefaultValue attributo.

Esempio

Il seguente programma crea una struttura a linee insieme a un costruttore. Il programma calcola la lunghezza di una linea utilizzando la struttura -

type Line = struct
   val X1 : float
   val Y1 : float
   val X2 : float
   val Y2 : float

   new (x1, y1, x2, y2) =
      {X1 = x1; Y1 = y1; X2 = x2; Y2 = y2;}
end
let calcLength(a : Line)=
   let sqr a = a * a
   sqrt(sqr(a.X1 - a.X2) + sqr(a.Y1 - a.Y2) )

let aLine = new Line(1.0, 1.0, 4.0, 5.0)
let length = calcLength aLine
printfn "Length of the Line: %g " length

Quando compili ed esegui il programma, restituisce il seguente output:

Length of the Line: 5