> LeekScript handledning
Du har bestämt dig för att gå över till strikt läge, och redigeraren översvämmar dig med en massa varningar som inte fanns tidigare. Ingen panik – hela poängen med strikt läge är att vara mindre tillåtande och ge mindre frihet, framför allt när det gäller typning. Låt oss titta på några vanliga varningar, för att först förstå vad problemet egentligen är och sedan hitta lösningar på det.
Ett första enkelt fall: jag vill lagra resultatet av en beräkning i en variabel av heltalstyp.
Problemet här är att funktionen sqrt alltid returnerar ett värde av typen real, även om sqrt(4) matematiskt är 2. Men ett reellt tal får inte plats utan förlust i en variabel av heltalstyp: vad ska man göra med decimalerna i till exempel sqrt(2)? Kompilatorn kräver därför att du gör ett uttryckligt val. Det finns olika lösningar för att bli av med den här varningen:
Ett annat fall: jag har en associativ array (Map) med heltal definierad enligt nedan, och jag vill lagra ett värde från den i en variabel som också är av heltalstyp – typerna borde ju stämma överens...
Varför säger varningen att mapEntier[0] är av typen "integer?" och inte bara "integer"? Som påminnelse: ett "?" i slutet av en typ betyder att typen även accepterar värdet null, det motsvarar "integer | null". Så varför skulle min associativa array kunna returnera null, när den enligt sin typ bara innehåller integer? När man vill läsa ett värde i en associativ array måste man ge den en nyckel, här "0" inom hakparenteser, och den nyckeln måste vara av den typ som definierats för arrayen, här integer, så där är allt i sin ordning. Men inget garanterar redigeraren att nyckeln finns i arrayen, och om man läser en associativ array med en nyckel som inte finns blir resultatet alltid null. Därför är resultatet av en åtkomst via nyckel i en associativ array alltid nullbart. Låt oss nu se hur man löser problemet för att slippa varningarna:
I det här fallet har jag en lista med heltal som jag vill sortera – inget särskilt komplicerat kan man tycka, jag tar till och med exemplet från dokumentationen
Ändå får jag 2 varningar på den här enkla raden. Låt oss börja med den första: den är omgiven av parenteser, vilket betyder att problemet ligger i funktionens parametrar, som inte följer den förväntade signaturen. Låt oss titta i dokumentationen för arraySort för att se dess signatur: Function real | integer> => Array> Det är alltså en funktion som förväntar sig 2 parametrar: en lista som första parameter, och som andra parameter en funktion som också tar 2 parametrar och returnerar ett heltal eller ett reellt tal. Som första parameter skickar vi mycket riktigt en lista, inga problem där, så det är den andra parametern som det är något fel på: vi skickar en funktion med signaturen Function any>, medan arraySort förväntar sig Function real | integer> – returtypen är inte den förväntade.
Typningsproblemet med callback-funktionen är löst, nu återstår den andra varningen. Som vi nyss såg är returvärdet från funktionen arraySort inte en Array\ som vi förväntar oss för vår variabel, utan bara Array, så vi måste casta returvärdet uttryckligen för att rätta till problemet.
Impossible de charger les données du jeu.
Vérifiez votre connexion et réessayez.