Hantera F# källkodsfiler och varför har inte F# någon Main() metod?
Förord
Denna artikel är till grund för hur filerna i ett F# projekt kompileras. Ordningen har stor betydelse i F# och även vart funktionerna är definierade. Om du inte vet om det som förklaras i artikeln kommer du förmodligen att fasta när du kompilerar ditt F# program.Innehåll
»»
Relaterade artiklar
» Kom igång med F# i Visual Studio 2010.» Värden och funktioner i F#
Hantera F# källkodsfiler.
När du väl kommer igång med F# så kommer du förmodligen att bryta upp programmet i flera filer och även flera projekt.I F# så har det betydelse i vilken ordning projekten och filerna i projekten kompileras.
Man kan bara anropa funktioner eller klasser som redan är definierade i en fil i samma projekt eller i en fil i ett annat projekt som har kompilerats innan anropet görs från den F# fil som just kompileras.
Så om du förändrar ordningen på kodfilerna så kanske inte ditt projekt bygger, detta har att göra med "Type Inference", allt måste vara känt för kompilator vid kopilering eftersom F# är statiskt typat.
F# kodfiler är kompilerade i den ordning som dom visas i "Visual Studio Solution" fönstret, överst först och nederst sist.
Här kopileras Program.fs först sen secondFile.fs och sist third.fs.
Om det finns funktioner i second.fs och third.fs som används från Program.fs så kommer inte programmet att kompilera.
Type Inference hittar då inte funktionerna.
Du måste då flytta upp båda filerna före Program.fs för att det ska gå att kompilera.
Om också second.fs anropar funktioner i third.fs så måste third.fs flyttas före second.fs.
F# program startar alltid i sista källkodsfilen i projektet.
Om du högerklickar på en fil som du vill flytta så får du upp denna popup fönster.
Varje gång du lägger till en källkodsfil så hamnar den sist och för att filerna ska hamna i rätt ordning så måste du flytta om dom.
Varför har inte F# någon Main() metod?
Ta exemplet innan med i vilken ordning källkodfilerna kompileras.
Säg att ditt program innehåller Program.fs och second.fs och kompileringen går igenom.
Om du sen lägger till third.fs så hamnar den sist och den innehåller inte någon F# kod eller om den bara innehåller funktionsdeklarationer så går också kompileringen igenom men ditt program kommer inte att göra någonting.
Ditt program kommer att starta, visa ett konsol fönster och sen avsluta
Det är för att den sista filen i projektet är alltid den filen där programmet startar.
I sista filen så måste det vara någon kod som drar igång själva programmet.
Alltså behövs det inte någon Main() metod i F#.
Nu kan detta vara lite förvirrande att inte ha en Main() metod där programmet börjar.
Då kan du för tydlighet göra en Main() metod så vet du alltid var ditt program startar, men den måste vara definierad i den sista filen i ditt projekt.
Det går annars lika bra utan en Main() metod.
Det handlar om vanesak vilket man väljer.
Nästa artikel är en introduktion till F# syntax och handlar om värden och funktioner.
Följ mig på Twitter som TigerHasse
0 Kommentarer