lister i structs i F #?

stemmer
1

Jeg er veldig nytt for F # og jeg prøver å gjøre en struct for lagring av polygoner, og det må inneholde en liste over koordinater:

type Polygon =
    struct
        val Coords : list
        new(list_of_Coords) = { Coords = list_of_Coords }
    end

men Visual Studio sier type 'Microsoft.FSharp.Collections.list <_>' forventer en typen argument (r), men er gitt 0

Jeg tror ikke som jeg ikke har tenkt å initial listen i struct - bare erklære det.

Publisert på 23/07/2009 klokken 08:08
kilden bruker
På andre språk...                            


4 svar

stemmer
5

I tillegg til Brians anwer: Du kan også gjøre strukturen generisk når du ikke vet hvilken type koordinater på forhånd (selv om string Polygonville ikke mye mening)

type 'a Polygon =
    struct
        val Coords : 'a list
        new(list_of_Coords) = { Coords = list_of_Coords }
    end

Vanligvis kan du erklære en posttype som dette (forutsetter at du har en Coordtype)

type Polygon = { Coords : Coord list }

// Code ...

let myPolygon = { Coords = [ ... ] }
Svarte 23/07/2009 kl. 08:18
kilden bruker

stemmer
4

Se

http://cs.hubfs.net/forums/thread/11377.aspx

for svaret.

(Gjentatt her:

Du må angi typen liste, f.eks liste <flyte>.

type Polygon =
    struct
        val Coords : list<float>
        new(list_of_Coords) = { Coords = list_of_Coords }
    end

)

Svarte 23/07/2009 kl. 08:11
kilden bruker

stemmer
0
> type 'a F = { coords: 'a list };;

type 'a F =
  {coords: 'a list;}

> let dd = {coords=[1.;2.]};;

val dd : float F

> let dd = {coords=[[1.;2.];[1.;2.]]};;

val dd : float list F
Svarte 23/07/2009 kl. 09:20
kilden bruker

stemmer
0

For tilfelle du ønsker generere så flyter som int og andre typer polygoner, kan du bruke følgende kode:

type Polygon<'a> =
    struct
        val Coords : list <'a>
        new(list_of_Coords) = { Coords = list_of_Coords }
    end

let inline genPolygon (a: 'a list) =
  new Polygon<'a> (a)

> genPolygon [1;2;3];;
val it : Polygon<int> = FSI_0002+Polygon`1[System.Int32] {Coords = [1; 2; 3];}
> genPolygon [1.0;2.0;3.0];;
val it : Polygon<float>
= FSI_0002+Polygon`1[System.Double] {Coords = [1.0; 2.0; 3.0];}
Svarte 23/07/2009 kl. 08:25
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more